题解P8800 [蓝桥杯 2022 国 B] 卡牌
Bitter_Tea · · 题解
我的做法是二分
有序性是显然的,如果我们不能凑出
二分的
在判断函数中,如果能当前能凑出期望的
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int n;
int a[N];
int b[N];
long long m;
bool judge(int x) {
long long s = 0;
for (int i = 1; i <= n; i++) {
if (x - a[i] <= b[i]) {
s += max(x - a[i], 0);
}
else return false;
}
if (s <= m) return true;
return false;
}
int main() {
cin >> n >> m;
int l = 0x3f3f3f3f;
int r = 0;
for (int i = 1; i <= n; i++) {
cin >> a[i];
l = min(l, a[i]);
}
for (int i = 1; i <= n; i++) {
cin >> b[i];
r = max(r, b[i] + a[i]);
}
int ans;
while (l <= r) {
int mid = l + r >> 1;
if (judge(mid)) {
ans = mid;
l = mid + 1;
}
else r = mid - 1;
}
cout << ans << '\n';
return 0;
}