제출 #1212045

#제출 시각아이디문제언어결과실행 시간메모리
1212045minhpkSelf Study (JOI22_ho_t2)C++20
100 / 100
168 ms7492 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a,b;
int x[1000005];
int base[1000005];
struct node{
      int z,x,base;
};
node z[1000005];
bool cmp(node a,node b){
    return a.base>b.base;
}
bool check(int mid){
    int remain=0;

    for (int i=1;i<=a;i++){
         if (z[i].base>=mid){
             int sl=mid/max(z[i].x,z[i].z) +(mid%max(z[i].z,z[i].x)!=0);
             remain+= b-sl;
         }else{
             int req=(mid-z[i].base)/z[i].x + ((mid-z[i].base)%z[i].x!=0);
             if (req>remain){
                  return false;
             }
             remain-=req;
         }
    }
    return true;
}

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> a >> b;
    for (int i=1;i<=a;i++){
         cin >> z[i].z;
    }
    for (int i=1;i<=a;i++){
         cin >> z[i].x;
    }
    for (int i=1;i<=a;i++){
        z[i].base=max(z[i].x,z[i].z)*b;
    }
    sort(z+1,z+1+a,cmp);

    int l=1;
    int r=1e18;
    int pos=0;
    while (l<=r){
         int mid=(l+r)/2;
         if (check(mid)){
             pos=mid;
             l=mid+1;
         }else{
             r=mid-1;
         }
    }
    cout << pos << "\n";
    return 0;
}
#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...