Problem Description

一天YZW参加了学校组织交际舞活动,活动的开始活动方分别给男生和女生从1-n进行编号,按照从小到大顺时针的方式进行男女搭档分配,相同编号的男女组合成一对,例如一号男生与一号女生配对,以此类推。可是YZW对其中一个小姐姐一见钟情,于是机智的他向管理员提出了两种操作
1.在这种情况下,管理员会给出移动的方向和大小,然后所有的男生向着这个方向移动x个位置。2.管理员会把相邻的奇数和偶数位置上的男生互换。
在其中女生的位置是不会变的。可是YZW不知道经过这些Q次操作后,他自己身在何方,能否到达自己喜欢的小姐姐身边。

Input

输入一个T代表T组数据(T<=10),每组输入一个n和q(2≤n≤200000,1≤q≤1000000,其中n为偶数),分别代表有n对男女和有q次操作。
接下来是q行,每一行输入:
1.x代表所有男生移动的位置的大小。同时x>0表示顺时针移动,x<0表示逆时针移动。
2.代表管理员会把相邻的奇数和偶数位置上的男生互换。

Output

输出1号到n号小姐姐配对的分别是几号男生。

Sample Input

1
6 3
1 2
2
1 2

Sample Output

4 3 6 5 2 1

解法:CF原题,就不必解释了http://codeforces.com/problemset/problem/641/C
 #include <bits/stdc++.h>
using namespace std;
int ope1 = ,ope2 = ;
int n,q;
int a[];
int t;
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&q);
while(q--)
{
int a,b;
scanf("%d",&a);
if(a==)
{
scanf("%d",&b);
ope1=(ope1+b+n)%n;
ope2=(ope2+b+n)%n;
}
else if(a==)
{
if(ope1%==)
{
ope1++;
ope2--;
}
else
{
ope1--;
ope2++;
}
}
}
int z=;
for(int i=,j=ope1; i<n/; i++,j=(j+)%n)
{
a[j]=z;
z=z+;
}
z=;
for(int i=,j=ope2; i<n/; i++,j=(j+)%n)
{
a[j]=z;
z=z+;
}
for(int i=; i<n-; i++)
printf("%d ",a[i]);
printf("%d\n",a[n-]);
}
return ;
}
05-11 18:31