B题能用二分吗?
#include<iostream> #include<string> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; ll a[5050], b[5050]; ll ans = -1; ll n, m, u; ll f = 0; void check(ll x) { f = 0; ll l = 1, r = x; ll alla = 0, allb = 0; while (r <= n) { for (int i = l; i <= r; i++) { alla += a[i]; allb += b[i]; } if (alla <= m && allb <= u) { ans = max(ans, x); f = 1; return; } else l++, r++; alla = 0, allb = 0; } } signed main() { cin >> n >> m >> u; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= n; i++) cin >> b[i]; ll cnt1 = 0, cnt2 = 0; for (int i = 1; i <= n; i++) { if (a[i] <= m) cnt1++; if (b[i] <= u) cnt2++; } ll cnt = max(cnt1, cnt2); ll l = 0, r = cnt + 2; while (l < r) { ll mid = l + r >> 1; check(mid); if (f == 0) r = mid; else l = mid + 1; f = 0; } if (l == r) check(l); cout << l; }
感觉二分思路很清楚,但卡在87.5%