注释部分if(s == gt) break;最终打印mid,只能得60分,而l - 1能得满呢?
本人认为两种写法是一样的
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,gt,a[1000010],l = 0,r = -9999,mid,s;
int main(){
cin >> n >> gt;
for(int i = 1;i <= n;i++) {
cin >> a[i];
r = max(a[i],r);
}
while(l <= r) {
mid = (l + r) >> 1;
s = 0;
for(int i = 1;i <= n;i++) {
if(a[i] - mid > 0) s += (a[i] - mid);
}
//if(s == gt) break;
if(s < gt) {
r = mid - 1;
}else {
l = mid + 1;
}
}
cout << l - 1 << endl;
//cout << mid << endl;
return 0;
}