제출 #1306602

#제출 시각아이디문제언어결과실행 시간메모리
1306602hxluk.kaSelf Study (JOI22_ho_t2)C++20
0 / 100
1097 ms5128 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...