样例都能过,可就是不对。改了后就只有10分了!本蒟蒻已崩溃
10分代码如下:
**#include<bits/stdc++.h>
using namespace std;
int n,m,a[1000002],h;/*
bool isenough(int h){
if(l>=m) return 1;
else return 0;
}*/
int main(){
scanf("%d%d",&n,&m);
int maxn=-0x3f3f3f3f;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
maxn=max(maxn,a[i]);
}
sort(a+1,a+n+1);
int l=0,r=maxn;
while(r>=l){
int mid=l+(r-l)/2,le=0;
// cout<<mid<<endl;
for(int i=1;i<=n;i++)
if(a[i]>mid) le+=(a[i]-mid);
if(le==m){
h=mid;
break;
}
else if(le>m) l=mid+1;
else r=mid-1;
}
printf("%d",h);
return 0;
}**
20分代码如下:
_#include<bits/stdc++.h>
using namespace std;
int n,m,a[1000002],h;
bool isenough(int h){
int l=0;
for(int i=1;i<=n;i++)
if(a[i]>h) l+=(a[i]-h);
if(l>=m) return 1;
else return 0;
}
int main(){
scanf("%d%d",&n,&m);
int maxn=-0x3f3f3f3f;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
maxn=max(maxn,a[i]);
}
int l=0,r=maxn;
while(r>=l){
int mid=l+(r-l+1)/2;
if(isenough(mid)){
h=mid;
l=mid+1;
}
else r=mid-1;
}
printf("%d",h);
return 0;
}__