70分 求调!(T-T)
查看原帖
70分 求调!(T-T)
1271341
chu_yh楼主2024/7/9 20:54

样例都能过,可就是不对。改了后就只有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;
}__
2024/7/9 20:54
加载中...