HDU 4004 The Frog's Games (二分贪心)

来源:互联网 发布:单片机做扫地机器人 编辑:程序博客网 时间:2024/05/21 09:14

二分答案,每次贪心尽量跳远去判断即可

代码:

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 500005;int L, n, m, a[N];bool judge(int mid) {    int s = 0;    int cnt = 0;    while (s != n) {        for (int i = s + 1; i <= n + 1; i++) {            if (a[i] - a[s] > mid) {                if (s == i - 1) return false;                s = i - 1;                cnt++;                if (cnt > m) return false;                break;            }        }    }    return true;}const int INF = 0x3f3f3f3f;int main() {    while (~scanf("%d%d%d", &L, &n, &m)) {        for (int i = 1; i <= n; i++) scanf("%d", &a[i]);        sort(a + 1, a + 1 + n);        a[++n] = L;        a[n + 1] = INF;        int l = 0, r = L;        while (l < r) {            int mid = (l + r) / 2;            if (judge(mid)) r = mid;            else l = mid + 1;        }        printf("%d\n", l);    }    return 0;}


0 0