题意很简单,N个人参与一个游戏,每一局都必须有一个人出来当监督,剩下N-1个人当玩家,第i个人要求至少自己要当ai次玩家,请问最少要进行多少次游戏。
答案的范围很大,而且求最小值,很明显是要二分答案了。
对于答案x的判定,先将每个人的要求加起来得到sum,然后判断x*n-sum,如果这个值大于等于x,说明可行,因为这个值就代表这些人可以提供最多的当监督的次数,只要监督的次数能够达到x次,就说明能够进行x次。
#include<cstdio>
#define LL __int64
int n;
LL a, sum, mx, low, top, mid;
bool check(LL x){
if(x*n-sum>=x) return 1;
return 0;
}
int main(){
while(~scanf("%d", &n)){
mx=sum=0;
for(int i=0; i<n; i++){
scanf("%I64d", &a);
sum+=a;
if(a>mx) mx=a;
}
low=mx;
top=sum;
while(low<top){
mid = (low+top)/2;
if(check(mid)) top=mid;
else low=mid+1;
}
printf("%I64d\n", low);
}
return 0;
}