题解:AT_abc365_c [ABC365C] Transportation Expenses
题意
已知
\[\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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具