90分二分 蒟蒻求助
查看原帖
90分二分 蒟蒻求助
843596
Otion楼主2023/3/8 08:13

这里二分最短跳跃距离

计算此时所需要移除的岩石

如果大于题干所给的可以岩石数就不行 然后return false


#include <iostream>

using namespace std;
const int N = (int)5e4;
int total_run;

int total_rocks;
int demand;
int dist[N];
int ans;
bool check(int x)
{
    int last = 0, cnt = 0;
    for (int i = 1; i <= total_rocks + 1; i++)
    {
        if (dist[i] - dist[last] >= x)
            last = i;
        else
            cnt++;
    }
    return cnt <= demand;
}
int main()
{
    cin >> total_run >> total_rocks >> demand;
    dist[0] = 0;
    dist[total_rocks + 1] = total_run;

    for (int i = 1; i <= total_rocks; i++)
    {

        cin >> dist[i];
    }
    int left = 1;

    int right = total_run;

    while (left <= right)
    {

        int mid = (left + right) / 2;

        if (check(mid))
        {

            ans = mid;

            left = mid + 1;
        }
        else
        {

            right = mid - 1;
        }
    }
    cout << ans << endl;
    return 0;
}
2023/3/8 08:13
加载中...