题目链接


#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 55;
#define int long long
int n,m;
int a[N];
bool check(int mid)
{
if(mid>a[2]+a[1])return false;
int sum=0;
for(int i=1;i<=n;i++)
{
if(a[i]<mid)sum+=mid-a[i];
}
return sum<=m&&sum<=mid;
}
signed main()
{
cin>>n>>m;
int l=0,r=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
r=max(r,a[i]);
}
sort(a+1,a+n+1);
while(l<r)
{
int mid=l+r+1>>1;
if(check(mid))l=mid;
else r=mid-1;
}
cout<<r<<endl;
}
该程序解决了一个数学问题,寻找数组中满足条件的最大整数。输入为数组长度n和一个整数m,数组元素不超过r。算法通过二分查找确定最大的整数mid,使得所有小于mid的元素之和小于等于m且小于mid。最终输出满足条件的最大整数。
1万+

被折叠的 条评论
为什么被折叠?



