[cf140C]New Year Snowmen

可以贪心,不断选择数量最多的3种雪球拼起来,用单调队列维护即可

 1 #include
 2 using namespace std;
 3 #define fi first
 4 #define se second
 5 map<int,int>mat;
 6 map<int,int>::iterator it;
 7 priority_queueint,int> >q;
 8 int n,k,tot,ans,a[11],fa[100005][11];
 9 int main(){
10     scanf("%d",&n);
11     for(int i=1;i<=n;i++){
12         scanf("%d",&k);
13         mat[k]++;
14     }
15     for(it=mat.begin();it!=mat.end();it++)q.push({(*it).se,(*it).fi});
16     for(int i=0;!q.empty();i=(i+1)%3){
17         a[i]=q.top().se;
18         q.pop();
19         if (i==2){
20             sort(a,a+3);
21             memcpy(fa[++ans],a,sizeof(a));
22             for(int j=0;j<3;j++)
23                 if (--mat[a[j]])q.push(make_pair(mat[a[j]],a[j]));
24         }
25     }
26     printf("%d\n",ans);
27     for(int i=1;i<=ans;i++){
28         for(int j=2;j>=0;j--)printf("%d ",fa[i][j]);
29         printf("\n");
30     }
31 }
View Code

 

你可能感兴趣的:([cf140C]New Year Snowmen)