P1873 [COCI 2011/2012 #5] EKO / 砍树——二分

二分
P1873

思路

二分找到满足获得木材大于M的最大锯片高度

代码

#include <bits/stdc++.h>
using namespace std;

const int N = 1e6 + 10;
int n, m;
int a[N];

bool check(int mid)
{
    long long int cnt = 0;
    
    for (int i = 0; i < n; i ++ )
    {
        if (a[i] > mid) cnt += a[i] - mid;
    }
    
    if (cnt >= m) return true;
    return false;
    
}

int SR(int l, int r)
{
    while (l < r)
    {
        int mid = l + r + 1 >> 1;
        
        if (check(mid)) l = mid;
        else r = mid - 1;
    }
    return r;
}

int main()
{
    scanf("%d %d", &n, &m);
    for (int i = 0; i < n; i ++ )
    {
        scanf("%d", &a[i]);
    }
    
    printf("%d\n", SR(0, 400000));
    
    return 0;
}
posted @ 2025-08-01 17:32  Roin_Long  阅读(7)  评论(0)    收藏  举报