Codeforce -Mafia

题意:有n个同学做游戏(Mafia),在一轮游戏中有一名同学不会参加(当监护人),给出

每名同学想要参与的次数,求最少要进行的游戏的轮数,保证每名同学都能达到自己想要参与的次数

题解:设想要参与的最多的游戏次数为maxx,则ans一定大于或等于maxx,

对maxx-a[i]求和res,当数值res>=maxx是满足,如果maxx++的话会TLE,所以二分maxx

 1 # include <cstdio>
 2 # include <iostream>
 3 # include <cstring>
 4 # include <algorithm>
 5 using namespace std;
 6 
 7 typedef long long LL;
 8 const int maxn=1e5+5,INF=0x7fffffff;
 9 LL a[maxn];
10 int n;
11 LL maxx;
12 
13 bool C(LL x){
14     LL sum=0;
15     for(int i=1;i<=n;i++)
16         sum+=(x-a[i]);
17     return sum>=x;
18 }
19 
20 int main(){
21     while(scanf("%d",&n)!=EOF){
22         maxx=0;
23         for(int i=1;i<=n;i++) {
24             scanf("%I64d",&a[i]);
25             maxx=max(maxx,a[i]);
26         }
27         LL ls=maxx-1,rs=INF;
28         while(rs-ls>1){
29             LL mid=(ls+rs)/2;
30             //cout<<mid<<endl;
31             if(C(mid)) rs=mid;
32             else ls=mid;
33         }
34         printf("%I64d\n",rs);
35     }
36     return 0;
37 }
View Code

 

posted @ 2017-07-08 09:53  林探惜  阅读(179)  评论(0编辑  收藏  举报