#include<bits/stdc++.h>
using namespace std;
#define task "a"
#define se second
#define fi first
#define ll long long
#define ii pair<ll, ll>
const long mxN = 3e5 + 7;
const ll inf = 1e18;
ll course[mxN], fr[mxN], m, n;
bool Binary(ll mid)
{
ll req = m * n;
for (int i = 1; i <= n; i++)
{
ll tmp = mid;
if (course[i] > fr[i])
{
ll cnt = min(m, (tmp + course[i] - 1) / course[i]);
req -= cnt;
tmp -= cnt * course[i];
}
tmp = max(0LL, tmp);
req -= (tmp + fr[i] - 1) / fr[i];
if (req < 0)
return 0;
}
return 1;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//freopen(task".INP", "r", stdin);
//freopen(task".OUT", "w", stdout);
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> course[i];
for (int i = 1; i <= n; i++)
cin >> fr[i];
ll l = 0, r = inf, ans = 0;
while (l <= r)
{
ll mid = (l + r) / 2;
if (Binary(mid))
{
ans = mid;
l = mid + 1;
}
else
r = mid - 1;
}
cout << ans;
}
# | 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... |