看了一下题解,感觉和题解唯一的差别是我在找到的时候直接输出答案了,就是if(tot==mid)那个语句,按照题解把tot>=mid放到一起就过了,想问一下大家问题出在哪里?
代码如下
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int size=1000005;
ll n,m,a[size];
int main()
{
cin>>n>>m;
for(int i=0;i<n;i=i+1)
{
cin>>a[i];
}
sort(a,a+n);
ll left=a[0];
ll right=a[n-1],mid,tot=0;
while(left<=right)
{
mid=(left+right)/2;
for(int i=0;i<n;i=i+1)
{
if(a[i]<=mid)
continue;
else
{
tot+=a[i]-mid;
}
}
if(tot==m)
{
cout<<mid;
return 0;
}
if(tot<m)
right=mid-1;
if(tot>m)
left=mid+1;
tot=0;
}
}
这份代码wa了9个点。。