#include <iostream>
using namespace std;
#define ll long long
const ll nx=3e5, inf=4e18;
ll n, m, a[nx], b[nx], l, r, mid, mx_val;
ll learn(int i, ll x, ll j) {
ll act=j*a[i];
ll need=max(0LL, x-act);
ll add=(need+b[i]-1)/b[i];
return j+add;
}
int canAchive(ll x) {
ll total=0;
for (int i=1; i<=n; i++) {
ll mn=inf;
ll est=0;
if (a[i]>0&&x>0) est = x / a[i];
for (int j=0; j<=m; j++) {
mn=min(mn, learn(i, x, j));
}
mn=min(mn, learn(i,x,0));
mn=min(mn, learn(i,x,m));
total+=mn;
if (total>m*n) return 0;
}
return total<=m*n;
}
int main() {
cin.tie(0)->sync_with_stdio(0);
cin>>n>>m;
for (int i=1; i<=n; i++) cin>>a[i], mx_val=max(mx_val, a[i]);
for (int i=1; i<=n; i++) cin>>b[i], mx_val=max(mx_val, b[i]);
r=mx_val*m;
while (l<r) {
mid=(l+r+1)/2;
if (canAchive(mid)) l=mid;
else r=mid-1;
}
cout << l;
}
| # | 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... |