HDU 4004 The Frog's Games (二分貪心)
阿新 • • 發佈:2019-02-10
二分答案,每次貪心儘量跳遠去判斷即可
程式碼:
#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; }