20分求助
查看原帖
20分求助
665585
weizhituteng2楼主2024/3/23 11:23
#include<bits/stdc++.h>
using namespace std;
long long n,m;
long long arr[1000000+1];
long long Max = -1,sum,num;
long long Min = INT_MAX;
int main(){
    cin>>n>>m;
	for(int i=1;i<=n;i++){
        scanf("%d",&arr[i]);
		Max = max(arr[i],Max);
		Min = min(arr[i],Min);
		sum+=arr[i];
	}
	long long l = 0,r = Max;
	while(l<r){
		long long mid = l+r>>1;
		num = 0;
		for(int i=1;i<=n;i++){
            if(arr[i]>mid){
				num+=arr[i]-mid;
			}
	    }
		if(num==m){
			cout<<mid<<endl;
			return 0;
		}
		if(num>m){
			l = mid;
		}else{
			r = mid-1;
		}
	}
	cout<<l<<endl;
	return 0;
}

就是如果吧mid = l+r>>1换成mid = l+r>>1+1就是0分了,思路也对了啊,为什么就是二十分,TLE

2024/3/23 11:23
加载中...