1 条题解

  • 0
    @ 2024-6-19 15:18:18

    正解

    小朋友实际上只有三种,按mod3\mod 3分为0,1,20,1,2三类。

    组成小组只有四种类型:000,111,222,012000,111,222,012

    显然,012012超过33是没有意义的,因为三个012012可以拆分成000,111,222000,111,222各一个。

    因此,枚举012012组成了几组即可。

    #include <bits/stdc++.h>
    #define maxn 1000005
    #define ll long long
    #define mod 998244353
    using namespace std;
    int n;
    vector<int> a[3];
    int x,best,f;
    int get(int x)
    {
    	for (int i=0;i<=2;i++) if (a[i].size()<x) return 0;
    	int ret=x;
    	for (int i=0;i<=2;i++) ret+=(a[i].size()-x)/3;
    	return ret;
    }
    int main()
    {
    	cin>>n;
    	for (int i=1;i<=n;i++) {cin>>x; a[x%3].push_back(i);}
    	for (int i=0;i<=2;i++)
    	{
    		int tt=get(i);
    		if (tt>best) {best=tt; f=i;}
    	}
    	cout<<best<<endl;
    	for (int i=1;i<=f;i++)
    	{
    		for (int j=0;j<=2;j++) {cout<<a[j][a[j].size()-1]<<" "; a[j].pop_back();}
    		cout<<endl;
    	}
    	for (int i=0;i<=2;i++)
    	{
    		while (a[i].size()>=3)
    		{
    			int siz=a[i].size();
    			cout<<a[i][siz-1]<<" "<<a[i][siz-2]<<" "<<a[i][siz-3]<<endl;
    			a[i].pop_back(); a[i].pop_back(); a[i].pop_back();
    		}
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    1425
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    (无)
    递交数
    160
    已通过
    20
    上传者