Problem Description
一天YZW参加了学校组织交际舞活动,活动的开始活动方分别给男生和女生从1-n进行编号,按照从小到大顺时针的方式进行男女搭档分配,相同编号的男女组合成一对,例如一号男生与一号女生配对,以此类推。可是YZW对其中一个小姐姐一见钟情,于是机智的他向管理员提出了两种操作
1.在这种情况下,管理员会给出移动的方向和大小,然后所有的男生向着这个方向移动x个位置。2.管理员会把相邻的奇数和偶数位置上的男生互换。
在其中女生的位置是不会变的。可是YZW不知道经过这些Q次操作后,他自己身在何方,能否到达自己喜欢的小姐姐身边。
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.代表管理员会把相邻的奇数和偶数位置上的男生互换。
接下来是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
1 #include <bits/stdc++.h> 2 using namespace std; 3 int ope1 = 0,ope2 = 1; 4 int n,q; 5 int a[1000005]; 6 int t; 7 int main() 8 { 9 scanf("%d",&t); 10 while(t--) 11 { 12 scanf("%d%d",&n,&q); 13 while(q--) 14 { 15 int a,b; 16 scanf("%d",&a); 17 if(a==1) 18 { 19 scanf("%d",&b); 20 ope1=(ope1+b+n)%n; 21 ope2=(ope2+b+n)%n; 22 } 23 else if(a==2) 24 { 25 if(ope1%2==0) 26 { 27 ope1++; 28 ope2--; 29 } 30 else 31 { 32 ope1--; 33 ope2++; 34 } 35 } 36 } 37 int z=1; 38 for(int i=0,j=ope1; i<n/2; i++,j=(j+2)%n) 39 { 40 a[j]=z; 41 z=z+2; 42 } 43 z=2; 44 for(int i=0,j=ope2; i<n/2; i++,j=(j+2)%n) 45 { 46 a[j]=z; 47 z=z+2; 48 } 49 for(int i=0; i<n-1; i++) 50 printf("%d ",a[i]); 51 printf("%d ",a[n-1]); 52 } 53 return 0; 54 }