题目描述:
AC代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define sf(x) scanf("%d", &x);
#define de(x) cout << x << " ";
#define Pu puts("");
const int N = 1e5 + 10;
int n, m;
ll ans;
int main() {
int T;
cin >> T;
ll a, b, c, d;
ll x, y;
while (T--) {
ans = 0;
cin >> a >> x >> y >> d;
if (a == 0) {
printf("1\n");
// 注意这里需要特判一下,因为如果a为0,则一定只能讲一个笑话,因为
// 题目约束a+b+c+d>1
continue;
}
b = min(x, y);
c = max(x, y);
ans += a; // 先讲a
ans += b * 2; // 接着依次讲b和c
c -= b;
// 最后把a置零,分两种情况
if (a >= (c + d)) {
ans += c + d; // 如果此时c+d小于a,则全部笑话都可以讲完
} else {
// 如果此时c+d大于a,则把a讲完后置为了0,则可以继续向下讲一个笑话
ans += a + 1;
}
printf("%lld\n", ans);
}
return 0;
}