返回题目问答
讨论 / 题目问答/ 帖子详情

为啥八十分

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,m;
ll a[1000010];
bool check(int x)
{
int res=0;
for(int i=0;i<n;i++)
{
if(a[i]>x)
res+=a[i]-x;
}
if(res>=m)
return true;
else
return false;
}
int main()
{
ll minn=INT_MAX,maxn=INT_MIN;
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>a[i];
minn=min(minn,a[i]);
maxn=max(maxn,a[i]);
}
ll l=minn,r=maxn;
while(r-l>1)
{
ll mid=(r+l)/2;
if(check(mid))
l=mid;
else
r=mid;
}
if(check(r))
cout<<r;
else
cout<<l;
return 0;
}
1 回复 0 转发 0 喜欢 86 阅读
回复 (1)
默认 最新
三石冲冲冲 2024/4/10
你的check函数里面的res要定义成ll,不能是Int,因为m<=2e9,你的res是砍树的高度和,可能会超出Int的范围
0