传送门
假设数字
i
i
i有
c
n
t
i
cnt_i
cnti个,设
x
=
m
a
x
1
≤
i
≤
n
{
c
n
t
i
}
x=max_{1\le i\le n}\{cnt_i\}
x=max1≤i≤n{cnti},设
c
n
t
i
=
x
cnt_i=x
cnti=x的
i
i
i有
k
k
k个,那么我们将这
k
k
k个数绑定在一起,呈周期性的放置到结果序列中,假设将
1
,
2
,
3
1,2,3
1,2,3绑定在一起,那么序列就是
1
,
2
,
3
,
.
.
.
,
1
,
2
,
3
,
.
.
.
,
1
,
2
,
3...
1,2,3,...,1,2,3,...,1,2,3...
1,2,3,...,1,2,3,...,1,2,3...,在这些
123
123
123之间均匀插入其它的数字即可,因此容易计算出最终答案,假设除去这
k
k
k种数字以外其它的数字总共有
c
c
c个,那么答案是
⌊
c
x
−
1
⌋
+
k
−
1
\lfloor\frac c{x-1}\rfloor+k-1
⌊x−1c⌋+k−1。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
int vis[maxn];
int main(){
int t;
scanf("%d",&t);
while(t--){
int n;
scanf("%d",&n);
memset(vis,0,sizeof(int)*(n+1));
int ans=0;
for(int i=1;i<=n;++i){
int u;
scanf("%d",&u);
vis[u]++;
}
for(int i=1;i<=n;++i)ans=max(ans,vis[i]);
int cnt=0;
for(int i=1;i<=n;++i)if(vis[i]==ans)cnt++;
int d=n-ans*cnt;
ans=d/(ans-1)+cnt-1;
printf("%d\n",ans);
}
}