【题目链接】
【思路要点】
- 补档博客,无题解。
【代码】
#include<bits/stdc++.h> using namespace std; #define MAXN 200005 template <typename T> void read(T &x) { x = 0; int f = 1; char c = getchar(); for (; !isdigit(c); c = getchar()) if (c == '-') f = -f; for (; isdigit(c); c = getchar()) x = x * 10 + c - '0'; x *= f; } long long n, s, limit; long long h[MAXN], v[MAXN]; bool check(long long value) { long long lft = s; for (int i = 1; i <= n; i++) { long long tmp = h[i] + v[i] * value; if (tmp >= limit) { lft -= tmp; if (lft <= 0) return true; } } return false; } int main() { read(n), read(s), read(limit); s = max(s, limit); for (int i = 1; i <= n; i++) read(h[i]); for (int i = 1; i <= n; i++) read(v[i]); long long l = 0, r = 0; for (int i = 1; i <= n; i++) r = max(r, (s - h[i]) / v[i] + 1); while (l < r) { long long mid = (l + r) / 2; if (check(mid)) r = mid; else l = mid + 1; } cout << l << endl; return 0; }