33分,求调
查看原帖
33分,求调
1217274
AyaSagili楼主2024/9/13 17:40

我看别人的二分都是用时间来判断是否可以晒完,我这里用的是数量判断

#include <bits/stdc++.h>
long long n, a, b;
std::vector<int> v;

int cnt(int k)
{
    int num = 0;
    int sum = b * k;
    for (int i = 0; i < n; i++)
    {
        if (v[i] <= a * k)
        {
            num++;
            continue;
        }
        int temp = v[i] - a * k;
        if (sum - temp >= 0)
        {
            num++;
            sum -= temp;
        }
    }
    return num;
}

int main()
{
    std::cin >> n >> a >> b;
    v.resize(n); // 预先分配空间
    for (int i = 0; i < n; i++)
    {
        std::cin >> v[i];
    }
    std::sort(v.begin(), v.end());
    int left = 1;
    int right = 1e9;
    int ans = 0;

    while (left <= right)
    {
        int mid = (left + right) / 2;
        if (cnt(mid) >= n)
        {
            ans = mid;
            right = mid - 1;
        }
        else
        {
            left = mid+1;
        }
    }
    std::cout << ans;
    return 0;
}

求调

2024/9/13 17:40
加载中...