#include <bits/stdc++.h>
using namespace std;
vector<long long> highest;
long long n,m;
vector<long long> A;
vector<long long> B;
bool check(long long mid){
long long ret = 0;
for(int i = 0;i<n;i++){
if (B[i] > A[i]){// try to use B[i] for its all of A's classes
if (B[i] > A[i]){
if (B[i] * m >= mid){
long long temp = (mid+B[i] + 1) / B[i];
ret += temp;
}
else{
long long temp = (mid - m*B[i] +B[i]-1) / B[i];
ret += m + temp;
}
}
}
else{
if (A[i] * m >= mid){
long long temp = (mid+A[i]+1)/A[i];
ret += temp;
}
else{
long long temp = (mid - m*A[i] + B[i] - 1) / B[i];
ret += m + temp;
}
}
if (ret > n * m){
return false;
}
}
return ret <= n * m;
}
void bsta(){
long long lb = 0;
long long ub = 1e18;
long long mid = -1;
long long ans = -1;
while (lb <= ub){
mid = (lb + ub) / 2;
if (check(mid)){
ans = mid;
lb = mid + 1;
}
else{
ub = mid - 1;
}
}
cout << ans;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
A.resize(n);
B.resize(n);
highest.resize(n,0);
for(int i = 0;i<n;i++){
cin >> A[i];
highest[i] = max(highest[i],A[i]);
}
for(int i = 0;i<n;i++){
cin >> B[i];
highest[i] = max(highest[i],B[i]);
}
bsta();
}
# | 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... |