60pts求hack(已通过目前已有的所有hack)
查看原帖
60pts求hack(已通过目前已有的所有hack)
752711
hateful_bug楼主2025/7/27 08:34
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int T,n,a[N],ans[N>>1][N],tt;
pair<int,int> b[N];
void solve()
{
	tt=0;	
	sort(a+1,a+n+1);
	int shu=1;
	a[n+1]=0;
	for(int i=1;i<=n;i++)
	if(a[i+1]!=a[i])
	b[++tt].first=shu,b[tt].second=a[i],shu=1;
	else
	++shu;
	int tot=n/2,num=0,h=1;
	while(1)
	{
		sort(b+h,b+tt+1);
		while(h<=tt&&b[h].first==0)
		++h;
		if(h==tt+1)
		break;
		if(h==tt)
		{printf("-1\n");return;}
		++num;
		ans[num][0]=0;
		int bj=b[tt].first;
		for(int i=tt;i>h;i-=2)
		{
			if(b[i].first!=bj)
			break;
			--b[i].first;
			--b[i-1].first;
			ans[num][++ans[num][0]]=b[i].second;
			ans[num][++ans[num][0]]=b[i-1].second;
		}
	}
	printf("%d\n",num);
	for(int i=1;i<=num;i++)
	{
		printf("%d ",ans[i][0]);
		for(int j=1;j<=ans[i][0];j++)
		printf("%d ",ans[i][j]);
		printf("\n");
	}
}
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
		if(n&1)
		{printf("-1\n");continue;}
		solve();
	}
	return 0;
}
2025/7/27 08:34
加载中...