为什么两种类似的写法,一个60,一个100
查看原帖
为什么两种类似的写法,一个60,一个100
1026350
Suboil楼主2023/7/31 00:01

注释部分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;
}
2023/7/31 00:01
加载中...