WA求助!!!
查看原帖
WA求助!!!
764672
ZJLmath楼主2023/1/12 20:21
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
#define int ull
const int mxn=1e6+5;
int prv[mxn],nxt[mxn];
bool rev;
int n,m;
void init(){
	for(int i=1;i<=n;++i){
		prv[i]=i-1;
		nxt[i]=i+1%(n+1); 
	}
	nxt[0]=1;prv[0]=n;rev=0;
	return;
}
signed main(){
	freopen("uva.out","w",stdout);
	int cas=1;
	while(cin>>n>>m){
		init();
		while(m--){
			int opt,x,y;
			cin>>opt;
			if(opt<=2&&rev==1)opt=3-opt;
			if(opt==4){
				rev=!rev;
			}else if(opt==1){
				cin>>x>>y;
				if(prv[y]==x)continue;
				int px=prv[x];
				int nx=nxt[x];
				int py=prv[y];
				int ny=nxt[y];
				nxt[px]=nx;
				prv[nx]=px;
				nxt[x]=y;
				prv[x]=py;
				nxt[py]=x;
				prv[y]=x;
			}else if(opt==2){
				cin>>x>>y;
				if(nxt[y]==x)continue;
				int px=prv[x];
				int nx=nxt[x];
				int py=prv[y];
				int ny=nxt[y];
				nxt[px]=nx;
				prv[nx]=px;
				prv[x]=y;
				nxt[x]=ny;
				nxt[y]=x;
				prv[ny]=x;
			}else if(opt==3){
				cin>>x>>y;
				if(nxt[y]==x)swap(x,y);
				int px=prv[x];
				int nx=nxt[x];
				int py=prv[y];
				int ny=nxt[y];
				if(nxt[x]==y){
					nxt[px]=y;
					prv[ny]=x;
					prv[y]=px;
					nxt[y]=x;
					prv[x]=y;
					nxt[x]=ny;
				} else{
					prv[x]=py;
					nxt[x]=ny;
					nxt[px]=nx;
					prv[nx]=px;
					prv[y]=px;
					nxt[y]=nx;
					nxt[py]=ny;
					prv[ny]=py;
				}
			}
		}
		int ans=0LL;
		int b=0LL;
		for(int i=1;i<=n;++i){
			b=nxt[b];
			if(i%2==1)ans+=i;
		}
		if(rev&&n%2==0)ans=n*(1+n)/2-ans;
		printf("Case %lld: %lld\n",cas++,ans);
	}
	return 0;
}
2023/1/12 20:21
加载中...