题解 P6823 【「EZEC-4」zrmpaul Loves Array】

这个题目费了我好久啊,如果数据小一点,真的就是暴力红题,sort+reverse就ok了,但是最重要的问题还是数据

n, m <= 10^6

10^6 = 1000000

我们先想一下,如果从0开始循环到n-1,加上sort和reverse,肯定TLE,不过这么写也能拿Subtask #1的24分

其实我们只要找到最后一个从大到小或者从小到大枚举不就OK了吗?几天前这么写是AC了,但#22是个防止暴力过的新数据点,TLE卡了很多人啊。

首先如果翻转数组用reverse会TLE更多点,所以自己写个循环,但#22还过不了。

现在注意了,翻转其实不用真得翻转,只要bool flag翻转时 flag = !flag,在指令3swap时判断,如果flag为true的话从右往左数格子交换,不然就从左往右可以了

代码出来,费了我几天啊,建议改为普及

#include <cstdio>
#include <algorithm>
using namespace std;

int arr[1000005], num[1000005], x[1000005], y[1000005];

int main()
{
    bool flag = true;
    int n, m, cur = 0, cnt = 0, cnt2 = 0, xb = 0;
    scanf("%d %d", &n, &m);
    for(register int i = 0; i < m; ++i)
    {
        scanf("%d", &num[i]);
        if(num[i] == 3)
        {
            scanf("%d %d", &x[cur], &y[cur]);
            ++cur;
        }
        if(num[i] == 1 || num[i] == 2)
        {
            xb = i;
        }
    }
    for(register int i = 0; i < n; ++i)
    {
        arr[i] = num[xb] == 1 ? i + 1 : n - i;
    }
    for(register int i = 0; i < xb; ++i)
    {
        if(num[i] == 3)
        {
            ++cnt;
        }
    }
    for(register int i = xb + 1; i < m; ++i)
    {
        if(num[i] == 3)
        {
            if(!flag)
            {
                register int temp2 = arr[n - x[cnt]];
                arr[n - x[cnt]] = arr[n - y[cnt]];
                arr[n - y[cnt]] = temp2;
                cnt++;
            }
            else
            {
                register int temp2 = arr[x[cnt] - 1];
                arr[x[cnt] - 1] = arr[y[cnt] - 1];
                arr[y[cnt] - 1] = temp2;
                cnt++;
            }
        }
        else if(num[i] == 4)
        {
            flag = !flag;
        }
    }
    if(flag)
    {
        for(register int i = 0; i < n; ++i)
        {
            printf("%d ", arr[i]);
        }
    }
    else
    {
        for(register int i = n - 1; i >= 0; --i)
        {
            printf("%d ", arr[i]);
        }
    }
    return 0;
}
posted @ 2020-09-19 18:19  HappyBobb  阅读(0)  评论(0编辑  收藏  举报  来源