求助
查看原帖
求助
531796
steve023楼主2023/1/12 20:27
#include<iostream>
const int iee=2000000+5;
int box[iee];
int next[iee];
int prev[iee];
int data[iee];
bool rev;
int n,m;
using namespace std;
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()
{
	int n,m;
	int jss=0;
	while(scanf("%d%d",&n,&m)==2)
	{
		init();
		int x,y,op;
		while(m--)
		{
			cin>>op;
			if(op<=2&&rev)op=3-op;
			if(op==4)rev=!rev;
			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]=ny;
				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;
		for(int i=0;i<=n;i++)
		{
			b=next[b];
			if(i%2==1)ans+=b;
		}
		cout<<"Case "<<jss++<<": "<<ans<<endl;
	}
	return 0;	
}
2023/1/12 20:27
加载中...