TakahiroNakamori

TakahiroNakamori

ナカモリタカヒロ

 
 

Gluttony

問題

E – Gluttony
プログラミング初級者から上級者まで楽しめる、競技プログラミングコンテストサイト「AtCoder」。オンラインで毎週開催プログラミングコンテストを開催しています。競技…

記録

解法

コード例

#include <bits/stdc++.h>
using namespace std;
#include <atcoder/all>
using namespace atcoder;
using ll = long long;
using P = pair<int, int>;
#define rep(i, n) for(int i = 0; i < (n); ++i)
// using mint = modint998244353;
// using mint = modint1000000007;
// const int mod = 1000000007;
// const ll INF = 1LL << 60;
// const int INF = 1001001001;

ll N, K;
vector<ll> A;
vector<ll> F;

ll check(ll mid) {
  ll result = 0;
  rep(i, N) { result += max(0LL, A[i] - mid / F[i]); }
  return result;
}

int main() {
  cin >> N >> K;

  A.resize(N);
  F.resize(N);
  rep(i, N) { cin >> A[i]; }
  rep(i, N) { cin >> F[i]; }

  sort(A.begin(), A.end());
  sort(F.rbegin(), F.rend());

  ll wa = -1;
  ll ac = 10000000001000;
  while(1 < ac - wa) {
    ll mid = (wa + ac) / 2;
    ll cnt = check(mid);
    if(cnt <= K) {
      ac = mid;
    } else {
      wa = mid;
    }
  }

  cout << ac << endl;
  return 0;
}