2 solutions

  • -2
    @ 2026-2-26 15:38:41
    #include <bits/stdc++.h>
    using namespace std;
    const int N = 3e5 + 5;
    using ll = long long;
    
    ll n, m;
    ll a[N], b[N], v[N];
    
    
    bool check(ll x) {
    	ll total = n * m;
    	ll used = 0;
    	for (int i = 1; i <= n; ++i) {
    		ll m_vi = m * v[i];
    		ll needed = 0;
    		if (m_vi >= x) {
    			needed = (x + v[i] - 1) / v[i];
    		} else {
    			ll rem = x - m_vi;
    			needed = m + (rem + b[i] - 1) / b[i];
    		}
    		if (total - used < needed)
    			return false;
    		used += needed;
    	}
    	return used <= total;
    }
    
    int main() {
    
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    
    	cin >> n >> m;
    	for (int i = 1; i <= n; ++i)
    		cin >> a[i];
    	for (int i = 1; i <= n; ++i) {
    		cin >> b[i];
    		v[i] = max(a[i], b[i]);
    	}
    
    	ll l = 0, r = 2e18;
    	ll ans = 0;
    	while (l <= r) {
    		ll mid = l + (r - l) / 2;
    		if (check(mid)) {
    			ans = mid;
    			l = mid + 1;
    		} else {
    			r = mid - 1;
    		}
    	}
    	cout << ans << endl;
    	return 0;
    }
    
    

    Information

    ID
    24350
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    8
    Tags
    (None)
    # Submissions
    288
    Accepted
    52
    Uploaded By