2 solutions
-
-2
#include <bits/stdc++.h> using namespace std; const int N = 3e5 + 5; using ll = long long; ll n, m; ll a[N], b[N], v[N]; bool check(ll x) { ll total = n * m; ll used = 0; for (int i = 1; i <= n; ++i) { ll m_vi = m * v[i]; ll needed = 0; if (m_vi >= x) { needed = (x + v[i] - 1) / v[i]; } else { ll rem = x - m_vi; needed = m + (rem + b[i] - 1) / b[i]; } if (total - used < needed) return false; used += needed; } return used <= total; } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> m; for (int i = 1; i <= n; ++i) cin >> a[i]; for (int i = 1; i <= n; ++i) { cin >> b[i]; v[i] = max(a[i], b[i]); } ll l = 0, r = 2e18; ll ans = 0; while (l <= r) { ll mid = l + (r - l) / 2; if (check(mid)) { ans = mid; l = mid + 1; } else { r = mid - 1; } } cout << ans << endl; return 0; }
Information
- ID
- 24350
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 8
- Tags
- (None)
- # Submissions
- 288
- Accepted
- 52
- Uploaded By