#include <bits/stdc++.h>
#define int long long
using namespace std;
const long long N = 1e6 + 5;
int a[N];
int b[N];
int n, m;
bool satisfied(int k)
{
int courses = 0;
for (int i = 0; i < n; i++)
{
int usedA = min(m, (k + a[i] - 1) / a[i]);
int left = k - usedA * a[i];
if (usedA >= 2e18 / a[i])
{
left = 0;
}
left = max(left, 0ll);
int usedB = (left + b[i] - 1) / b[i];
assert(usedB <= 2e18 / b[i]);
courses += usedA + usedB;
}
return courses <= n * m;
}
void solve()
{
cin >> n >> m;
int k = 0;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
for (int i = 0; i < n; i++)
{
cin >> b[i];
a[i] = max(a[i], b[i]);
k = max(k, a[i]);
}
int l = 0, r = 1e16 + 1;
while (r - l > 1)
{
int mid = (r + l) / 2;
satisfied(mid) ? (l = mid) : (r = mid);
}
cout << l << endl;
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
int t = 1;
// cin >> t;
for (int i = 1; i <= t; i++)
{
// cout << "Case #" << i << ':' << ' ';
solve();
cout << endl;
}
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |