求助今天月赛T1
  • 板块学术版
  • 楼主zyk7
  • 当前回复21
  • 已保存回复21
  • 发布时间2020/9/6 19:30
  • 上次更新2023/11/5 13:36:27
查看原帖
求助今天月赛T1
223022
zyk7楼主2020/9/6 19:30

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!

2020/9/6 19:30
加载中...