32 pts 求 hack
查看原帖
32 pts 求 hack
1376088
tiantian0820楼主2025/7/27 19:04
#include<iostream>
#include<vector>
// int a[100002];//[2];//getchar();
using namespace std;
// struct e{
//     int nm,ct;
// }x[1000002];
//vector<int>x[1000002],z(1000002);
int main() {
	int T;
	cin>>T;
	while(T--) {
vector<int>x[1000002],z(1000002);
		int n;
		cin>>n;
		if(n%2) {
			cout<<"-1\n";
		for(int j=1,i=0,t; j<=n; ++j) {
			cin>>t;
		}
			continue;
		}
		z.clear();
		for(int j=1,i=0,t; j<=n; ++j) {
			cin>>t;++z[t];
		}
		for(int j=1; j<=1000000; ++j) {
            if(z[j]){
			x[z[j]].push_back(j);}
		}int mx=0;
		for(int j=1000000; j>=0; --j) {
            if(!x[j].empty()){mx=j;break;}
		}int mxx=mx;
        vec:
      //  mx=5;
        vector<int>v[mx+1];int p=0;
        if(2*mx>n){cout<<"-1\n";
            //cout<<100-t<<'\n';
	//	z.clear();
			goto ctn;}
		for(int j=mx,t,q; j>0; --j) {
            for(auto t:x[j]){
              //  t=x[j].back();
                if(p>=mx){p=0;}
                q=p;--q;
                if(q<=0){q=mx;--q;}
 if(p<j&&v[p].size()%2||mx!=mxx){goto ps;}
                for(int i=0;i<mx;++i,++p){
                    if(p>=mx){p=0;}
                    if(v[p].size()%2){break;}
                }ps:
                for(int i=0;i<j;++i,++p){
                    if(p>=mx){p=0;}
                    v[p].push_back(t);
                }if(p>=mx){p=0;}
                //if(v[p].size()%2){p=0;}
              //  x[j].pop_back();
            }
		//	x[z[j]].push_back(j);
        }
        for(int j=mx-1; j>=0; --j) {
		if(v[j].size()%2) {
		//	cout<<"-1\n";
            //cout<<100-t<<'\n';
		//z.clear();
            ++mx;
			goto vec;
		}
        }
		cout<<mx<<'\n';
		for(int j=mx-1; j>=0; --j) {
            cout<<v[j].size()<<' ';
            for(auto i:v[j]){
            cout<<i<<' ';
            }
            cout<<'\n';//v[j].clear();
		}
        
        ctn:
		//z.clear();
	}
	return 0;
}


2025/7/27 19:04
加载中...