二分法10分求调QAQ
查看原帖
二分法10分求调QAQ
1107382
Yg2023楼主2024/1/7 21:57
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#define ll long long
ll a[1000005] = {0}, sum[1000005] = {0};
int main(int argc, char *argv[]) {
    ll m, n;
    scanf("%lld %lld",&n, &m);
    for(ll i = 1; i <= n; i++)
    {
        scanf("%lld",&a[i]);
    }
    std::sort(&a[1], &a[n+1]);
    for(ll i = 1; i <= n; i++) sum[i] = sum[i-1] + a[i];
    for(ll i = n; i >= 1; i--)
    {
        if((sum[n] - sum[i - 1] - (n - i + 1) * a[i - 1]) < m) continue;
        else
        {
            ll l = a[i - 1], r = a[i];
            ll right = sum[n] - sum[i - 1],num = n - i + 1;
            while(l < r)
            {
                ll mid = (l + r) / 2;
                if((right - num * mid) <= m) r = mid;
                else l = mid + 1;
            }
            printf("%lld",l);
            break;
        }
    }
    
}
2024/1/7 21:57
加载中...