冲就完事了
/* 把每种颜色的数量统计出来,并求出最小的数量Min 从Min+1开始降序枚举s,暴力判就行了 */ #include<bits/stdc++.h> using namespace std; #define N 2000006 int n,a[N],tot; map<int,int>mp; map<int,int>::iterator it; int cnt[N]; inline int judge(int x,int s){ int k=x/s,mod=x%s; if(mod==0)return k; if(s-1-mod<=k)return k+1; return 0; } int main(){ int t;cin>>t; while(t--){ mp.clear(); cin>>n; for(int i=1;i<=n;i++){ int x;scanf("%d",&x); mp[x]++; } tot=0; for(it=mp.begin();it!=mp.end();it++)cnt[++tot]=it->second; int Min=0x3f3f3f3f; for(int i=1;i<=tot;i++)Min=min(Min,cnt[i]); for(int s=Min+1;s>=2;s--){ int flag=1,res=0; for(int i=1;i<=tot;i++){ if(judge(cnt[i],s)==0){flag=0;break;} else res+=judge(cnt[i],s); } if(flag){cout<<res<<' ';break;} } } }