题目:
tips:逆向思维,已知想玩的局数,则可推知最大当裁判的数量,裁判总数大于假定局数k,则k左移。因为要求临界值,所以二分(?);r是莽设的,非已知;注意r传过去时,要开ll. return l/r都行。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }