• D. Little Artem and Dance---cf669D(模拟)


    题目链接:http://codeforces.com/problemset/problem/669/D

    给你n个数,一开始是1 2 3 4 5 6 ... n 这样的

    现在有两个操作,第一个操作是所有数向右边移动x个位置 

    第二个操作奇数和偶数的位置互换

    现在有Q个指令,问最后的序列是什么;

     n and q (2 ≤ n ≤ 1 000 000, 1 ≤ q ≤ 2 000 000)

    由于数据范围比较大,但是我们可以发现所以得偶数他们相邻的总是2 4 6 8 10...奇数都是1 3 5 7 9 11...也就是说无论怎么变他们的相对位置是不变的,就是每个数(奇数或偶数)的前后总是固定的,

    所以我们可以记录数字1和2的位置在哪里,然后依次填出最终答案;

    为了方便我们下标从0开始;

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <stack>
    #include <map>
    #include <vector>
    using namespace std;
    typedef long long LL;
    #define N 1000100
    #define met(a, b) memset(a, b, sizeof(a))
    
    int n, Q, a[N];
    
    int main()
    {
        while(scanf("%d %d", &n, &Q)!=EOF)
        {
            met(a, 0);
    
            int first = 0, second = 1, op, x;
    
            while(Q--)
            {
                scanf("%d", &op);
                if(op == 1)
                {
                    scanf("%d", &x);
                    first = (x + first + n) % n;
                    second = (x + second + n) % n;
                }
                else
                {///如果1所在位置下标是偶数(相对于下标为0来说的),那么1的位置就要往后挪一位,2则相反;
                    if(first%2)
                    {
                        first = (first - 1 + n) % n;
                        second = (second + 1 + n) % n;
                    }
                    else
                    {
                        first = (first + 1 + n) % n;
                        second = (second - 1 + n) % n;
                    }
                }
            }
            int num = 1;
            while(num <= n)///填入n个数
            {
                a[first] = num++;///奇数所在位置
                a[second] = num++;
                first = (first+2) % n;///要加两个的,
                second = (second+2) % n;
            }
            for(int i=0; i<n; i++)
                printf("%d%c", a[i], i==n-1?'
    ':' ');
        }
        return 0;
    }
    /*
    6 9
    2
    1 -2
    2
    1 -6
    1 -6
    1 4
    2
    1 -1
    2
    
    2 5 4 1 6 3
    */
    View Code
  • 相关阅读:
    php+redis简易消息队列
    Linux关闭selinux的方法(临时关闭和永久关闭)
    Linux清理buff/cache
    Centos禁止ping的设置方法
    浅谈mysql触发器
    mysql中left join right join inner join用法分析
    mysql主从配置详解(图文)
    mysql中的几种判断语句
    mysql锁表处理方法
    Mysql里的order by与索引
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/5463865.html
Copyright © 2020-2023  润新知