80分求助!
查看原帖
80分求助!
1022761
wuuk楼主2023/10/3 13:12

二分答案,代码如下

#include <iostream>
using namespace std;
int L, N, K, a[100010], b[100010];
bool P(int k)
{
    int tot = 0;
    for (int i = 1; i < N; i++)
    {
        if (b[i] > k)
        {
            tot += b[i] / k;
        }
    }
    return tot <= K;
}
int main()
{
    cin >> L >> N >> K;
    for (int i = 0; i < N; i++)
    {
        cin >> a[i];
    }
    for (int i = 1; i < N; i++)
    {
        b[i] = a[i] - a[i - 1];
    }
    int left = 0, right = L, mid, ans;
    while (left <= right)
    {
        mid = left + right >> 1;
        if (mid == 0)
        {
            break;
        }
        if (P(mid))
        {
            ans = mid;
            right = mid - 1;
        }
        else left = mid + 1;
    }
    cout << ans;
}
2023/10/3 13:12
加载中...