这是我一开始的代码
#include<bits/stdc++.h>
using namespace std;
int n;
long long m,a[1000100],l=0,r=0,mid,sum=0;
int main()
{
//freopen("1873.in","r",stdin);
//freopen("1873.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]>r) r=a[i];
}
while(l<r)
{
mid=(l+r)>>1;sum=0;
for(int i=1;i<=n;i++)
if(a[i]>mid) sum=sum+a[i]-mid;
if(sum>m) l=mid+1;
else r=mid;
}
cout<<l;
return 0;
}
这是后来AC的代码
#include<bits/stdc++.h>
using namespace std;
int n;
long long m,a[1000100],l=0,r=0,mid,sum=0;
int main()
{
freopen("1873.in","r",stdin);
//freopen("1873.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]>r) r=a[i];
}
while(l<r)
{
mid=(l+r+1)>>1;sum=0;
for(int i=1;i<=n;i++)
if(a[i]>mid) sum=sum+a[i]-mid;
if(sum>=m) l=mid;
else r=mid-1;
}
cout<<l;
return 0;
}
只有 while循环 那一段不同,感觉差不多,为什么就不一样呢?