2 solutions

  • -2
    @ 2026-2-26 15:39:23
    
    
    #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;
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    • -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;
      }
      
      
      • 1

      Information

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