RT,这是我比赛时的写法,和题解的差不多(不如它的简洁),样例和我构造的几个数据都过了,但 Subtask1 和 Subtask3 全都 wa 掉了,代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
int n,m,f[N],h[N],p,x,y;
//f是原有序列,一定保持单调
//h是如果有操作3的序列
int a=0,b=0,c=0;
//c表示当前序列是不是单调的
//a表示如果 单调的 话是正着输出还是倒着输出
//b表示如果 不单调(出现操作3)的话是正着输出还是倒着输出
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i){
f[i]=i;
h[i]=i;
}
for(int i=1;i<=m;++i){
scanf("%d",&p);
if(p==1){
a=0;b=0;c=0;
}
if(p==2){
a=1;b=1;c=0;
}
if(p==3){
scanf("%d%d",&x,&y);
if(!b) swap(h[x],h[y]);
else swap(h[n+1-x],h[n+1-y]);
c=1;//取消单调性
}
if(p==4){
if(c) b^=1;
else a^=1;
//改变输出的顺序
}
}
if(c){
if(!b){
for(int i=1;i<=n;++i) printf("%d ",h[i]);
}
else{
for(int i=n;i>=1;--i) printf("%d ",h[i]);
}
return 0;
}
if(!a){
for(int i=1;i<=n;++i) printf("%d ",f[i]);
}
else{
for(int i=n;i>=1;--i) printf("%d ",f[i]);
}
return 0;
}
请大家帮我看一下究竟是哪的细节出了问题,thx!