小 A 需要先挑战 n 周的比赛才能挑战期末考试。第$ i$ 周(1≤i≤n)有一场上机赛和一场练习赛,难度值分别为 Ci,Ei。
小 A 初始的能力值为 A,每一周小 A 可以选择两场比赛中至少一场 AK。如果小 A 的能力值不小于比赛的难度值,那么小 A 能顺利 AK 比赛并通过挑战。在一周所有比赛结束后,小 A 的能力值可以得到相当于 AK 比赛难度值之和的提升。如果小 A 这一周无法 AK 任何一场比赛,那么小$ A$ 这一周挑战失败,无法继续接下来的挑战。
小 A 需要你帮忙计算,他最多能通过多少周的挑战。
输入
第一行,一个正整数 T(1≤T≤100),表示数据组数。
对于每组数据:
第一行,两个整数 n,A(1≤n≤104,−109≤A≤109),分别表示比赛周数与小 A 的初始能力值。
longlongintmax(longlongint a, longlongint b) { return a > b ? a : b; } longlongintmin(longlongint a, longlongint b) { return a < b ? a : b; } intmain() { int t; scanf("%d", &t); for (int i = 0; i < t; i++) { int n; longlong A = 0; int ans = 0; scanf("%d%lld", &n, &A);
for (int j = 0; j < n; j++) { scanf("%lld", &c[j]); } int flag = 0; for (int j = 0; j < n; j++) { longlongint improve = 0; scanf("%lld", &e[j]); if (flag == 1) { continue; } ans = j; if (A < c[j] && A < e[j]) { flag = 1; continue; } if (A >= max(c[j], e[j])) { improve = min(c[j], e[j])<0?max(c[j], e[j]):c[j]+e[j]; } else { improve = min(c[j], e[j]); }
A += 1LL * improve; }
if ((A >= c[n - 1] || A >= e[n - 1]) && ans == n - 1) { ans = n; } printf("%d\n", ans); }