RE求原因
查看原帖
RE求原因
482047
feropen楼主2024/5/16 14:02

RE信息:Runtime Error. Received signal 6: Aborted / IOT trap.

代码:

#include<bits/stdc++.h>
using namespace std;
const int M=1e6+10,N=3010;
int T,n,m,k,a[M],ansf,b[N],now,last,fu,y,sum,rr,gtg,ba;
struct output
{
	int op,x,y;
}ans[N*10];
deque<int> q[N],ty[N];
int check(int x,int r)
{
	for(int i=1;i<=n;i++) 
	{
		if(q[i].empty()||i==fu)continue;
		
		if(r==1&&q[i].back()==x)return i;
		if(r==2&&q[i].front()==x)return i;
		if(r==3&&b[i]==x)return i;
	}
	return 0;
}
int main()
{
	cin>>T;
	while(T--)
	{
		cin>>n>>m>>k;
		ansf=0,fu=n;
		for(int i=1;i<=m;i++)
			cin>>a[i];
		for(int i=1;i<=m;i++)
		{
			int l1=check(a[i],1);
			int l2=check(a[i],2);
			if(l1)
			{
				ans[++ansf]=(output){1,l1,0};
				q[l1].pop_back();
				goto end;
			}
			if(l2)
			{
				ans[++ansf]=(output){1,fu,0};
				ans[++ansf]=(output){2,l2,fu};
				q[l2].pop_front();
				goto end;
			}
			sum=0;
			for(int j=1;j<=n;j++)
			{
				if(q[j].empty())continue;
				sum+=q[j].size();
			}
			if(sum!=(n-1)*2)
			{
				for(int j=1;j<=n;j++)
				{
					if(j==fu)continue;
					if(q[j].empty())
					{
						q[j].push_back(a[i]);
						ans[++ansf]=(output){1,j,0};
						goto end;
					}
					if(q[j].size()<2)
					{
						q[j].push_back(a[i]);
						ans[++ansf]=(output){1,j,0};
						goto end;
					}
				}
			}
			now=i+1;
			last=++ansf;
			rr=0;
			memset(b,0,sizeof(b));
			for(int j=1;j<=n;j++)
			{
				if(q[j].empty())continue;
				b[j]=q[j].back();
			}
			for(int j=i+1;j<=m;j++)
			{
				if(!check(a[j],3))
				{
					rr=j;
					break;
				}
			}
			if(rr==0)
			{
				ans[last]=(output){1,fu,0};
				for(int j=i+1;j<=m;j++)
				{
					int t=check(a[j],3);
					ans[++ansf]=(output){1,t,0};
					if(q[t].empty())
					{
						q[t].push_back(a[j]);
						continue;
					}
					if(q[t].back()==a[j])
						q[t].pop_back();
					else q[t].push_back(a[j]);
				}
				i=m;
				goto end;
			}
			for(int j=1;j<=n;j++)
				ty[j]=q[j];
			y=check(a[rr],2);
			if(a[rr]==a[i])
			{
				for(int j=1;j<=n;j++)
					q[j]=ty[j];
				for(int j=i+1;j<rr;j++)
				{
					int t=check(a[j],3);
					ans[++ansf]=(output){1,t,0};
					if(q[t].empty())
					{
						q[t].push_back(a[j]);
						continue;
					}
					if(q[t].back()==a[j])
						q[t].pop_back();
					else q[t].push_back(a[j]);
				}
				ans[last]=(output){1,fu,0};
				ans[++ansf]=(output){1,fu,0};
				i=rr;
				goto end;
			}
			ba=b[y];
			gtg=0;
			for(int j=i+1;j<rr;j++)
				if(a[j]==ba)gtg++;
			if(gtg%2==1)
			{
				for(int j=1;j<=n;j++)
					q[j]=ty[j];
				ans[last]=(output){1,fu,0};
				q[fu].push_back(a[i]);
				for(int j=i+1;j<rr;j++)
				{
					int t=check(a[j],3);
					ans[++ansf]=(output){1,t,0};
					if(q[t].empty())
					{
						q[t].push_back(a[j]);
						continue;
					}
					if(q[t].back()==a[j])
						q[t].pop_back();
					else q[t].push_back(a[j]);
				}
				ans[++ansf]=(output){1,y,0};
				q[y].pop_front();
				fu=y;
				i=rr;
			}
			if(gtg%2==0)
			{
				for(int j=1;j<=n;j++)
					q[j]=ty[j];
				ans[last]=(output){1,y,0};
				q[y].push_back(a[i]);
				for(int j=i+1;j<rr;j++)
				{
					if(a[j]==ba)
					{
						ans[++ansf]=(output){1,fu,0};
						continue;
					}
					int t=check(a[j],3);
					ans[++ansf]=(output){1,t,0};
					if(q[t].empty())
					{
						q[t].push_back(a[j]);
						continue;
					}
					if(q[t].back()==a[j])
						q[t].pop_back();
					else q[t].push_back(a[j]);
				}
				ans[++ansf]=(output){1,fu,0};
				ans[++ansf]=(output){2,fu,y};
				q[y].pop_front();
				i=rr;
			}
			end:;
		}
		cout<<ansf<<"\n";
		for(int i=1;i<=ansf;i++)
		{
			if(ans[i].op==1)cout<<"1 "<<ans[i].x;
			else cout<<"2 "<<ans[i].x<<" "<<ans[i].y;
			cout<<"\n";
		}
	}
	return 0;
}
/*
1
2 8 3
2 1 3 1 1 2 3 1


1
2 8 3
2 1 3 1 2 3 1 1

*/
2024/5/16 14:02
加载中...