给出 n 个数,可以将所有数任意排列,问两个相同的数之间的距离最大的最小值是多少
题目也就是问,两个相同的数的最大距离是多少,其中这两个相同的数中间没有任何一个数等于他们两个
const int N=2e5+5;
int n,m,t;
int i,j,k;
int a[N];
int pos[N];
int maxx;
bool C(int x)//间隔为 x
{
int s=1;
for(int i=1;i<=n;i++){//枚举题目中 ai 的范围
if(a[i]){
int tmp=a[i];
for(int j=s;j<=n && tmp;j+=x+1){//将 n 个位置填上
tmp--;
pos[j]=i;
}
if(tmp) return 0;
s++;
}
else break;
}
return 1;
}
int main()
{
//IOS;
rush(){
sd(n);
ms(a,0);
for(i=1;i<=n;i++){
int x;
sd(x);
a[x]++;
}
sort(a+1,a+1+n,greater<int>());
int l=0,r=n,ans;
while(r>=l){
int mid=l+r>>1;
if(C(mid)) ans=mid,l=mid+1;
else r=mid-1;
}
pd(ans);
}
//PAUSE;
return 0;
}