Submission #1352087

#TimeUsernameProblemLanguageResultExecution timeMemory
1352087hyyhSelf Study (JOI22_ho_t2)C++20
100 / 100
171 ms8752 KiB
#include <iostream>
#include <math.h>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <iomanip>
#include <set>
#include <bitset>
#include <unordered_map>
#include <cstdlib>

using namespace std;
using ll = long long;
using pii = pair<ll,ll>;
using piii = tuple<int,int,int>;
#define f first
#define s second
#define endl '\n'
#define all(x) begin(x),end(x)

vector<pii> vc;

int n,m;

bool check(ll x){
    __int128 left = 0;
    for(auto [a,b]:vc){
        if(x <= a*m) left += m-(x-1)/a-1;
        else left -= (x-a*m+b-1)/b;
    }
    return left>=0;
}

signed main(){
    cin >> n;
    cin >> m;
    for(int i{};i < n;i++){
        int g;
        cin >> g;
        vc.emplace_back(g,0);
    }
    for(int i{};i < n;i++) cin >> vc[i].s,vc[i].f = max(vc[i].f,vc[i].s);
    ll l = 0;
    ll r = 8e18+10;
    ll ans = r+1;
    while(l <= r){
        ll md = l+(r-l)/2;
        if(!check(md)) ans = min(ans,md),r = md-1;
        else l = md+1;
    }
    cout << ans-1;
}
#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...