#include <bits/stdc++.h>
using namespace std;
long long n, m;
long long a[300007];
long long b[300007];
bool spr(long long sr)
{
long long all = 0;
for(int i = 0; i < n; i++)
{
if(a[i] > b[i])
{
long long temp = min((sr + a[i] - 1) / a[i], m);
//cout << temp << " " << ceil(double(max(sr - temp * a[i], (long long)0)) / double(b[i])) << endl;
all += temp;
all += (max(sr - temp * a[i], (long long)0) + b[i] - 1) / b[i];
}
else
{
all += (sr + b[i] - 1) / b[i];
//cout << ceil(double(sr) / double(b[i])) << endl;
}
}
if(all > n * m)
{
return false;
}
return true;
}
int main()
{
cin >> n >> m;
for(int i = 0; i < n; i++)
{
cin >> a[i];
}
for(int i = 0; i < n; i++)
{
cin >> b[i];
}
long long l = 0, r = 1000000000000000001, odp = 0;
//cout << spr(18) << endl;
while(l <= r)
{
long long sr = (l + r) / 2;
if(spr(sr))
{
odp = sr;
l = sr + 1;
}
else
{
r = sr - 1;
}
}
cout << odp << 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... |