WA求助,已过样例
查看原帖
WA求助,已过样例
765748
zzldd楼主2023/1/12 20:23
#include<bits/stdc++.h>
using namespace std;
const int maxn=200005;
int Next[maxn],Prev[maxn],n,m;
bool rev;
void init(){
	for(int i=1;i<=n;i++){
		Prev[i]=i-1;
		Next[i]=i+1%(n+1);
	}Next[0]=1;
	Prev[0]=n;
	rev=0;
}
int main(){
//	freopen("a.txt","w",stdout);
	int Kas=0;
	while(scanf("%d%d",&n,&m)==2){
		init();
		int x,y,op;
		while(m--){
			cin>>op;
			if(op==4) rev=!rev;
			if(rev&&op<=2) op=3-op;
			else if(op==1){
				cin>>x>>y;
				if(Prev[y]==x) continue;
				int px=Prev[x],nx=Next[x];
				int py=Prev[y],ny=Next[y];
				Next[px]=nx;
				Prev[nx]=px;
				Next[x]=y;
				Prev[x]=py;
				Next[py]=x;
				Prev[y]=x;
			}
			else if(op==2){
				cin>>x>>y;
				if(Next[y]==x) continue;
				int px=Prev[x],nx=Next[x];
				int py=Prev[y],ny=Next[y];
				Next[px]=nx;
				Prev[nx]=px;
				Next[x]=ny;
				Prev[x]=y;
				Prev[ny]=x;
				Next[y]=x;
			}else if(op==3){
				cin>>x>>y;
				if(Next[y]==x) swap(x,y);
				int px=Prev[x],nx=Next[x];
				int py=Prev[y],ny=Next[y];
				if(Next[x]==y){
					Next[px]=y;
					Prev[ny]=x;
					Prev[y]=px;
					Next[y]=x;
					Prev[x]=y;
					Next[x]=ny;
				}else{
					Prev[x]=py;
					Next[x]=ny;	
					Next[py]=x;
					Prev[y]=px;
					Next[y]=nx;
					Next[px]=y;
				}
			}
		}
		long long ans=0,b=0;
		if(rev&&n%2==0){
			for(int i=n;i>=1;i--){
				b=Prev[b];
				if(i%2==1) ans+=b;
			} 
		} else{
			for(int i=1;i<=n;i++){
				b=Next[b];
				if(i%2==1) ans+=b;
			}
		}
		cout<<"Case "<<++Kas<<": "<<ans<<endl;
	}
} 
2023/1/12 20:23
加载中...