NC213760. 项链
描述
输入描述
第一行两个数: N 和 M
第 行:输入每一次操作
输出描述
对于每次操作 4,输出这个项链每位置上的珠子的编号。
示例1
输入:
5 6 1 2 4 4 2 5 3 4 3 4
输出:
1 3 4 2 5 1 5 3 4 2 1 2 4 3 5
说明:
第一次操作后,2 号珠子被放到了 4 号珠子的后面,项链为 [1,3,4,2,5]C++(clang++11) 解法, 执行用时: 159ms, 内存消耗: 3504K, 提交时间: 2020-11-19 13:41:43
#include<bits/stdc++.h> using namespace std; int n,m,op,x,y; int l[100010],r[100010]; bool rot; int main() { cin>>n>>m; for(int i=1;i<=n;i++) { l[i]=i-1; r[i]=i+1; } l[1]=n,r[n]=1; while(m--) { scanf("%d",&op); if(op==1) { scanf("%d%d",&x,&y); 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) { scanf("%d%d",&x,&y); 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++) { int temp=r[i]; r[i]=l[i]; l[i]=temp; } } if(op==4) { printf("1"); for(int i=r[1];i!=1;i=r[i]) { printf(" %d",i); } printf("\n"); } } return 0; }