#include <iostream>
#include <algorithm>
#include <vector>
#include <climits>
#define pb push_back
#define snd second
#define fst first
#define forn(i,n) for(int i=0;i<n;++i)
#define forsn(i,s,n) for(int i=s; i<n; ++i)
#define all(x) x.begin(), x.end()
#define imp(x) for(auto __:x)cout<<__<<" "; cout<<endl;
#define sz(c) int((c).size())
using namespace std;
typedef long long ll;
typedef pair<ll,ll> ii;
typedef vector<ll> vi;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
ll n,m;cin>>n>>m;
__int128 limite=n*m;
vi A(n), B(n);
//ten en cuenta que solo podemos obtener A[i] si j==i;
forn(i,n)cin>>A[i];
forn(i,n){
cin>>B[i];
A[i]=max(A[i], B[i]);
}
auto can=[&](ll tar)->bool{
__int128 clases=0;
forn(i,n){
__int128 cur=min((tar+A[i]-1)/A[i], m);
clases+=cur;
__int128 self=tar-cur*A[i];
if(self>0)//debo estudiar fuera de clase
clases+=(self+B[i]-1)/B[i];
if(clases>limite)return false;
}
return true;
};
ll l=0, r=LLONG_MAX;
while(r-l>1){
ll m=l+(r-l)/2;
if(can(m)){
l=m;
}else r=m;
}
cout<<l<<endl;
}
# | 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... |