Binary Search

题目:

348A.Mafia 

tips:逆向思维,已知想玩的局数,则可推知最大当裁判的数量,裁判总数大于假定局数k,则k左移。因为要求临界值,所以二分(?);r是莽设的,非已知;注意r传过去时,要开ll. return l/r都行。

 1 #include<bits/stdc++.h>
 2 #define mem(a) memset(a,0,sizeof(a))
 3 #define ll long long
 4 #define inf 0x3f3f3f3f
 5 const int N=2e5+5;
 6 const int M=1e3+10;
 7 using namespace std;
 8 int mod=1e9+7;
 9 ll Mod=500;
10 ll n;
11 ll a[N],maxa=0,k;
12 ll binarys(ll l,ll r){
13    ll mid=1;
14    while(l<r){
15      mid=(l+r)>>1;
16    if(mid<maxa) {l=mid+1;continue;}
17    ll sum=0;
18    for(int i=1;i<=n;i++){
19       sum+=mid-a[i];
20    }
21    if(sum>=mid)
22      r=mid;
23    else l=mid+1;
24    }
25    return l;
26 }
27 int main()
28 {
29     cin>>n;
30     for(int i=1;i<=n;i++)
31     {
32         cin>>a[i];
33         maxa=max(maxa,a[i]);
34     }
35     k=10*maxa;
36     cout<<binarys(1,k)<<endl;
37     return 0;
38 }
Mafia

 

posted @ 2019-07-01 08:53  XXrl  阅读(106)  评论(0编辑  收藏  举报