80 pts
查看原帖
80 pts
814343
bc2_cryeggy楼主2023/9/29 18:52

对着题解和讨论区改了好久……

代码:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <vector>

using namespace std;

using ll = unsigned long long;

const int kMaxN = 2e5 + 20, kInf = (((1 << 30) - 1) << 1) + 1;

ll n, s, l, h[kMaxN], a[kMaxN], mid;

bool C(int mid) {
  ll ans = 0;
	for (int i = 1; i <= n; ++ i) {
		(h[i] + a[i] * mid >= l) && (ans += h[i] + a[i] * mid);
		if (ans >= s) {
      return 1;
    }
	}
	return (ans >= s);
}

int main() {
//  freopen(".in", "r", stdin);
//  freopen(".out", "w", stdout);
  cin >> n >> s >> l;
  for (int i = 1; i <= n; ++ i) {
    cin >> h[i];
  }
  for (int i = 1; i <= n; ++ i) {
    cin >> a[i];
  }
  if (C(0)) {
	  return cout << 0 << '\n', 0;
  }
  ll l = 0, r = max(s, l), ans = 0;
  for (; l <= r; ) {
    mid = l + r >> 1;
    (C(mid)? r = mid - 1 : l = mid + 1); 
    (C(mid)) && (ans = mid);
  }
  cout << ans << '\n';
  return 0;
}
2023/9/29 18:52
加载中...