二分求助
查看原帖
二分求助
839739
guohezu0517楼主2024/5/28 13:34

来练二分的,大佬帮看看check函数有问题吗

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[300010];
ll n, m;
bool check(ll mid)
{
    ll sh = m;
    for (ll i = 1; i < n; i++)
    {

        if (a[i] < mid)
        { // 如果最大值a[n-1]也小,应该操作
            sh -= mid - a[i];
        }
        else
        {
            if (i != i - 1)
            {
                sh += a[i] - mid;
            }
        }
    }
    if (sh >= 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
int main()
{

    cin >> n >> m;

    for (ll i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    sort(a, a + n);
    ll l = a[1];
    ll r = a[n - 1] + m;
    while (l < r)
    {
        ll mid = (l + r + 1) / 2;
        if (check(mid))
        {
            l = mid;
        }
        else
        {
            r = mid - 1;
        }
    }
    cout << l * (n - 2);
    return 0;
}

2024/5/28 13:34
加载中...