社区讨论

90分二分 蒟蒻求助

P2678[NOIP 2015 提高组] 跳石头参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lo30co1d
此快照首次捕获于
2023/10/23 22:43
2 年前
此快照最后确认于
2023/10/23 22:43
2 年前
查看原帖
这里二分最短跳跃距离
计算此时所需要移除的岩石
如果大于题干所给的可以岩石数就不行 然后return false
CPP

#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;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...