Analysis: Calculate the starting point of 1 and 2, and then accumulate it.
#include <iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<cmath>using namespacestd;intans[1000005];intMain () {//freopen ("1.in", "R", stdin); //freopen ("1.txt", "w", stdout); intN, M; while(~SCANF ("%d%d", &n, &m)) {intx, y; intsum1=1, sum2=2; for(intI=1; i<=m; i++) {scanf ("%d", &x); if(x==1) {scanf ("%d", &y); Sum1+=y; Sum2+=y; Sum1%=n;sum1+=n;sum1%=N; Sum2%=n;sum2+=n;sum2%=N; } Else { if(sum2%2) {sum1--; Sum2++; } Else{sum1++; Sum2--; } sum1%=n;sum1+=n;sum1%=N; Sum2%=n;sum2+=n;sum2%=N; }} sum1%=n;sum1+=n;sum1%=N; Sum2%=n;sum2+=n;sum2%=N; for(intI=1; i<=N;) { if(sum1==0) sum1=N; if(sum2==0) sum2=N; ANS[SUM1]= i++; ANS[SUM2]= i++; Sum1= (sum1+2+n)%N; Sum2= (sum2+2+n)%N; } for(intI=1; i<=n; i++) printf ("%d%c", Ans[i],i==n?'\ n':' '); } return 0;}
Codeforces 641 C Little Artem and Dance