NOIP2015提高组跳石头

Posted ssttkkl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NOIP2015提高组跳石头相关的知识,希望对你有一定的参考价值。

https://www.luogu.org/problem/show?pid=2678

最小值最大问题,二分答案。每次检查是否能仅移走m块岩石使得所有跳跃距离均大于等于mid。

#include <iostream>
#include <list>
#define maxn 50005
const int inf = 0x7fffffff;
using namespace std;
int l, n, m;
int dist[maxn];
bool check(int k);
int main()
{
    cin >> l >> n >> m;
    for (int i = 1; i <= n; i++)
        cin >> dist[i];
    dist[++n] = l;

    int left = 0, right = 1000000005, mid;
    while (left < right)
    {
        mid = (left + right + 1) / 2;
        if (check(mid)) // 能否仅通过移去m块石头使所有跳跃距离≥mid
            left = mid;
        else
            right = mid - 1;
    }
    cout << left << endl;
    return 0;
}
bool check(int k)
{
    int cnt = 0;
    int last = 0;
    for (int i = 1; i <= n; i++)
    {
        if (dist[i] - dist[last] < k)
            cnt++;
        else
            last = i;
        if (cnt > m)
            return false;
    }
    return true;
}

 

以上是关于NOIP2015提高组跳石头的主要内容,如果未能解决你的问题,请参考以下文章

[NOIp2015提高组]跳石头

JZYZOJ1452 NOIP2015_提高组Day2_1_跳石头

[NOIP2015提高&洛谷P2678]跳石头 题解(二分答案)

跳石头|河中跳房子|NOIP2015提高组T4|二分法

[NOIP2015] 提高组 洛谷P2678 跳石头

NOIP2015提高组Day2 T1 跳石头