题解十二:P13500 「Cfz Round 6」Kyu-kurarin
题目 | 题解
题意
一个正整数序列
思路
本题的答案显然具有单调性。所以,二分答案。
对于一个
bool check(ll s){
ll num=0;
for(ll i=1;i<=n;i++){
num+=max((ll)0,s-a[i]+1);
if(num>s*k) return false;
}return true;
}
::::info[s-a[i]+1 的含义]
由
反过来,当
若是该项本身就满足 max() 在该式与
代码
//1.38s / 8.14MB / C++17 O2
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
ll n,k,l,r=1e12,mid,ans,a[1000010];
bool check(ll s){
ll num=0;
for(ll i=1;i<=n;i++){
num+=max((ll)0,s-a[i]+1);
if(num>s*k) return false;
}return true;
}
int main(){
// freopen("ice4.in","r",stdin);
cin>>n>>k;
for(ll i=1;i<=n;i++) cin>>a[i];
while(l<r){
mid=(l+r)/2+1;
if(check(mid)) l=mid;
else r=mid-1;
}cout<<l;
return 0;
}