题意
已知
\[\sum_{i=1}^{n}\min(x,a_i)\le m \]问 \(x\) 最大为多少。
思路
由于答案具有单调性,所以考虑二分答案。
但是有一点要注意,当 \(\sum_{i=1}^{n}a_i\le m\) 时,应该输出 infinite
。 因为此时的 \(x\) 可以为任意一个数。
AC code
#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
int n,m,a[2000005],ans=0,tt=0;
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]>m) a[i]=m;
tt+=a[i];
}
if(tt<=m){
cout<<"infinite";
return 0;
}
int l=0,r=m,mid,mt;
while(l<=r){
mid=l+(r-l)/2;
mt=0;
for(int i=1;i<=n;i++){
mt+=min(a[i],mid);
}
if(mt<m) l=mid+1,ans=max(mid,ans);
else if(mt==m){cout<<mid;return 0;}
else r=mid-1;
}
cout<<ans;
return 0;
}
标签:le,Transportation,int,题解,tt,ABC365C,long,Expenses
From: https://www.cnblogs.com/bubble-sort/p/18369998