返回题解分享
讨论 / 题解分享/ 帖子详情

砍树 - 题解

二分答案即可

#include <bits/stdc++.h>
using namespace std;
const int N = 1000010;
int a[N];
int n,m;
int mx = -1;
bool check(int x){
    long long sum = 0;
    for (int i = 1; i <= n; ++i) {
        if (a[i] > x) {
            sum += (a[i] - x);
        }else{
            continue;
        }
    }
    if (sum < m) return true;
    return false;
}
int main(){
    scanf("%d %d",&n,&m);
    for (int i = 1; i <= n; ++i) {
        scanf("%d",&a[i]);
        mx = max(mx,a[i]);
    }
    int l = 1,r = mx;
    while (l + 1 < r) {
        int mid = (l + r)/2;
        if (check(mid)) {
            r = mid;
        }else {
            l = mid;
        }
    }
    printf("%d\n",l);
    return 0;
}
0 回复 0 转发 0 喜欢 3 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!