2020-11-14牛客小白月赛29-F
项链
https://ac.nowcoder.com/acm/contest/8564/F
2020-11-14牛客小白月赛29-F
[by_041]
- 就是道小模拟啦,附上AC代码:
#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 操作中的前后关系会改变
,可以说是很可惜了