HDU 4004 The Frog's Games

xiaoxiao2021-02-28  61

Description

一条大河长L,n个石头,一只青蛙要过河。最多跳M次。问它的能力至少是多少,才能跳过去。

Algorithm

二分答案。这里是要求满足条件的最小的。

Code

#include <bits/stdc++.h> using namespace std; const int N(500000+9); int a[N], n, m; int mid(int l, int r) { return l + (r - l) / 2; } int ok(int x) { int l(0), cnt(1); for (int i(1); i <= n + 1; i++) { if (a[i] - a[l] <= x) continue; l = i - 1; if (a[i] - a[l] > x) return false; cnt++; } return cnt <= m; } int main() { //freopen("in", "r", stdin); ios::sync_with_stdio(false); int L; while (cin >> L >> n >> m) { a[0] = 0; for (int i(1); i <= n; i++) cin >> a[i]; sort(a + 1, a + n + 1); a[n + 1] = L; int l(0), r(L), ans(0); while (l <= r) { int m(mid(l, r)); //cout << l << ' ' << r << ' '<< m << ' ' << ok(m) << endl; if (ok(m)) r = m - 1, ans = m; else l = m + 1; } cout << ans << endl; } }

阅读原文

转载请注明原文地址: https://www.6miu.com/read-83911.html

最新回复(0)