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
*/