2020-11-14牛客小白月赛29-F
[by_041]
#include<iostream>
using namespace std;
void swp(int&a,int&b)
{a^=b;b^=a;a^=b;return;}
int maxx(int a,int b)
{return a>b?a:b;}
int minn(int a,int b)
{return a<b?a:b;}
int input()
{char ch=getchar();
while(ch<'0'||ch>'9')
ch=getchar();
int a=ch-'0';
while((ch=getchar())>='0'&&ch<='9')
a=(a<<3)+(a<<1)+ch-'0';
return a;
}
void output(int a)
{
if(a>9)
output(a/10);
putchar(a%10+'0');
return;
}
int n,m,op,x,y,l[10001],r[10001];
bool rot;
int main()
{
n=input();
m=input();
for(int i=1;i<=n;i++)
{
l[i]=i-1;
r[i]=i+1;
}
l[1]=n;r[n]=1;
while(m--)
{
op=input();
if(op==1)
{
x=input();
y=input();
r[l[x]]=r[x];
l[r[x]]=l[x];
l[r[y]]=x;r[x]=r[y];r[y]=x;l[x]=y;
}
if(op==2)
{
x=input();
y=input();
r[l[x]]=r[x];
l[r[x]]=l[x];
r[l[y]]=x;l[x]=l[y];l[y]=x;r[x]=y;
}
if(op==3)
{
for(int i=1;i<=n;i++)
{r[i]^=l[i];l[i]^=r[i];r[i]^=l[i];}
}
if(op==4)
{
printf("1");
if(rot)
for(int i=l[1];i^1;i=l[i])
printf(" %d",i);
else
for(int i=r[1];i^1;i=r[i])
printf(" %d",i);
putchar('\n');
}
}
return 0;
}
- 比赛的时候还想用标记线性解决3的问题(这一点在代码中有所体现),可题目中
注意翻转后 1,2 操作中的前后关系会改变
,可以说是很可惜了