题解: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;
}
posted @   Laoda_Bryant  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示