这题真的不难,但是取模千万注意细节…

首 先 想 , 如 果 没 有 操 作 二 , 那 太 简 单 了 , 每 次 记 录 往 左 移 和 往 右 移 了 几 步 首先想,如果没有操作二,那太简单了,每次记录往左移和往右移了几步 ,,,

最 后 输 出 就 行 , 因 为 每 个 数 都 是 左 移 或 右 移 了 相 同 的 步 数 最后输出就行,因为每个数都是左移或右移了相同的步数 ,

现 在 有 操 作 二 , 我 们 也 可 以 当 成 操 作 一 来 看 待 \color{Red}现在有操作二,我们也可以当成操作一来看待 ,

每 次 操 作 二 交 换 奇 数 和 偶 数 位 置 , 也 就 是 此 时 在 奇 数 上 的 数 右 移 一 位 每次操作二交换奇数和偶数位置,也就是此时在奇数上的数右移一位 ,

偶 数 就 左 移 一 位 偶数就左移一位

注意到最开始如果出现操作二,就是所有偶数右移动1位,偶数左移1位

那 么 操 作 后 , 此 时 奇 数 去 了 偶 数 位 置 , 偶 数 去 了 奇 数 位 置 那么操作后,此时奇数去了偶数位置,偶数去了奇数位置 ,,

所 以 这 就 改 变 了 奇 偶 的 相 对 位 置 , 记 录 一 下 所以这就改变了奇偶的相对位置,记录一下 ,

当操作一移动的步数是奇数时,也改变了奇偶相对位置

那 么 直 接 记 录 奇 数 和 偶 数 的 移 动 位 置 就 好 了 那么直接记录奇数和偶数的移动位置就好了

一些坑点:

记录移动步数记得取模,不然直接爆int

判断奇数时小心,因为 ( − 1 ) % 2 ! = 1 (-1)\%2!=1 (1)%2!=1

/*1 2 3 4 5 6
5 6 1 2 3 4
6 5 2 1 4 3
4 3 6 5 2 1*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e6+10;
int n,m,a[maxn];
int main()
{
	cin >> n >> m;
	int ji=0,ou=0,ok=0;//记录奇数位和偶数位的偏移 
	for(int i=1,l,r;i<=m;i++)
	{
		scanf("%d",&l);
		if( l==2 )
		{
			if( ok==0 )	ji++,ou--;
			else	ji--,ou++;
			ok^=1;
		}
		else
		{
			scanf("%d",&r);
			ji+=r,ou+=r;
			if( abs(r)%2==1 )	ok^=1;//改变了奇偶性 
		}
		ji%=n,ou%=n;
	}
	ji=(ji+n)%n,ou=(ou+n)%n;
	for(int i=1;i<=n;i++)
	{
		if( i%2==1 )	a[ (i+ji-1+n)%n ]=i;
		else		a[ (i+ou-1+n)%n ]=i;
	}
	for(int i=0;i<n;i++)	printf("%d ",a[i]);
}