제출 #676569

#제출 시각아이디문제언어결과실행 시간메모리
676569rittin1Self Study (JOI22_ho_t2)C++17
100 / 100
219 ms11440 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=3e5 + 5;
int a[N];
int b[N];
bool check(int mid,int n,int m){
    int days=0;
    for(int i=1;i<=n;i++){
        if(mid<=(a[i]*m)){
            if(mid%a[i]==0){
                days+=(mid)/a[i];
            }
            else{
                days+=1+((mid)/a[i]);
            }
        }
        else{
            days+=m;
            if((mid-a[i]*m)%b[i]==0){
                days+=(mid-a[i]*m)/b[i];
            }
            else{
                days+=1+((mid-a[i]*m)/b[i]);
            }
        }
        if(days>(n*m)){
            return 0;
        }
    }
    return 1;
}
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n,m;
    cin >> n >> m;
    for(int i=1;i<=n;i++){
        cin >> a[i];
    }
    for(int i=1;i<=n;i++){
        cin >> b[i];
        a[i]=max(a[i],b[i]);
    }
    
    int hi=(1LL<<60);
    int lo=0;
    int mid;
    while(hi-lo>1){
        mid=(hi+lo)/2;
        if(check(mid,n,m)){
            lo=mid;
        }
        else{
            hi=mid;
        }
    }
    cout << lo;
    
}
#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...