Submission #1267645

#TimeUsernameProblemLanguageResultExecution timeMemory
1267645julia_08Self Study (JOI22_ho_t2)C++20
100 / 100
136 ms5132 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

const int MAXN = 3e5 + 10;
const ll INF = 1e18;

ll a[MAXN], b[MAXN];

ll n, m;

bool check(ll x){

  ll cnt = 0;

  for(int i=1; i<=n; i++){

    if(b[i] >= a[i]){
      
      cnt += (x + b[i] - 1) / b[i];

    } else{

      ll cur = min(m, (x + a[i] - 1) / a[i]);

      ll left = max(0LL, x - cur * a[i]);
      cur += (left + b[i] - 1) / b[i];

      cnt += cur;

    } 

    if(cnt > n * m) return false;

  }

  return cnt <= n * m;

}

ll bs(){

  ll l = 0, r = INF;

  while(l < r){
    ll m = l + (r - l + 1) / 2;
    if(check(m)) l = m;
    else r = m - 1;
  }

  return l;

}

int main(){
  cin.tie(0)->sync_with_stdio(0);

  cin >> n >> m;

  for(int i=1; i<=n; i++) cin >> a[i];

  for(int i=1; i<=n; i++) cin >> b[i];

  cout << bs() << "\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...