95pts求助
查看原帖
95pts求助
482007
TanX_1e18楼主2023/7/21 13:06

rt

#include<bits/stdc++.h>
#define ll long long
int T,n,m,k,a[200009],zhan[309][3],now,lt[609],l[400009],r[400009],top,v[609];
using namespace std;
int main()
{
	cin>>T;
	while(T--)
	{
		memset(a,0,sizeof(a));
		memset(zhan,0,sizeof(zhan));
		memset(lt,0,sizeof(lt));
		memset(l,0,sizeof(l));
		memset(r,0,sizeof(r));
		top=0;
		cin>>n>>m>>k;
		now=n;
		int i=0;
		for(i=1;i<=m;i++)
		{
			cin>>a[i];
		}
		i=1;
		while(i<=m)
		{
			if(lt[a[i]])
			{
				int nt=lt[a[i]];
				if(zhan[nt][0]==a[i]&&zhan[nt][1]==0)
				{
					top++;
					l[top]=nt;
					zhan[nt][0]=0;
					lt[a[i]]=0;
				}
				else
				if(zhan[nt][0]==a[i]&&zhan[nt][1])
				{
					top++;
					l[top]=now;
					top++;
					l[top]=now;
					r[top]=nt;
					zhan[nt][0]=zhan[nt][1];
					zhan[nt][1]=zhan[nt][2];
					zhan[nt][2]=0;
					lt[a[i]]=0;
				}
				else
				if(zhan[nt][1]==a[i]&&zhan[nt][2]==0)
				{
					top++;
					l[top]=nt;
					zhan[nt][1]=0;
					lt[a[i]]=0;
				}
				else
				if(zhan[nt][2]==a[i])
				{
					top++;
					l[top]=nt;
					zhan[nt][2]=0;
					lt[a[i]]=0;
				}
			}
			else
			{
				int ngm=0;
				for(int j=1;j<=n;j++)
				{
					if(j!=now&&zhan[j][1]==0)
					{
						ngm=j;
						break;
					}
				}
				if(ngm)
				{
					top++;
					l[top]=ngm;
					if(zhan[ngm][0]==0)
					{
						lt[a[i]]=ngm;
						zhan[ngm][0]=a[i];
					}
					else
					{
						lt[a[i]]=ngm;
						zhan[ngm][1]=a[i];
					}
				}
				else
				{
					int cnt=top+1;
					top++;
					for(int j=1;j<=k;j++)
					v[j]=0;
					for(int j=i+1;j<=m;j++)
					{
						if(a[j]==a[i])
						{
							l[cnt]=now;
							top++;
							l[top]=now;
							i=j;
							break;
						}
						if(zhan[lt[a[j]]][0]==a[j])
						{
							if(!zhan[lt[a[j]]][1])
							{
								l[cnt]=now;
								lt[a[i]]=now;
								zhan[now][0]=a[i];
								top++;
								l[top]=lt[a[j]];
								now=lt[a[j]];
								zhan[lt[a[j]]][0]=0;
								lt[a[j]]=0;
								i=j;
								break;
							}
							else
							{
								l[cnt]=lt[a[j]];
								zhan[lt[a[j]]][0]=zhan[lt[a[j]]][1];
								zhan[lt[a[j]]][1]=a[i];
								lt[a[i]]=lt[a[j]];
								top++;
								l[top]=now;
								top++;
								l[top]=now;
								r[top]=lt[a[j]];
								lt[a[j]]=0;
								i=j;
								break;
							}
						}
						else
						{
							top++;
							l[top]=lt[a[j]];
							v[a[j]]++;
							if(zhan[lt[a[j]]][1])
							zhan[lt[a[j]]][1]=0;
							else
							zhan[lt[a[j]]][1]=a[j];
						}
					}
					for(int j=1;j<=k;j++)
					{
						if(v[j]%2==1)
						lt[j]=0;
					}
				}
			}
			i++;
		}
		cout<<top<<endl;
		for(i=1;i<=top;i++)
		if(r[i])
		{
			printf("2 %d %d\n",l[i],r[i]);
		}
		else
		{
			printf("1 %d\n",l[i]);
		}
	}
    return 0;
}

#20WA

2023/7/21 13:06
加载中...