当前位置: 代码迷 >> 综合 >> C - Pinkie Pie Eats Patty-cakes(二分+模拟)
  详细解决方案

C - Pinkie Pie Eats Patty-cakes(二分+模拟)

热度:78   发布时间:2024-02-08 09:13:24.0

 

给出 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;
}