思路
将2*n个老人送过桥后,K还是在原来的那头此时要判断第二个老人是否需要休息,如果不需要休息则直接输出送完老人的时间,否则需要休息就考虑两种情况。
1.等第二个老人。
2.过去帮助第一个老人:①在过完桥发现老人已经休息好了,②在过完桥发现还需要等老人。
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve() {
ll n, x, t;
scanf("%lld%lld%lld", &n, &x, &t);
if (x <= (2 * n - 2) * t) {
// 已经休息完了
printf("%lld\n", 4 * n * t);
} else {
//还未休息完
ll sum = 4 * n * t;
ll dif = x - (2 * n - 2) * t;
if (dif < t) {
//等第二个老人,然后带走
printf("%lld\n", sum + dif);
} else if (dif >= t && dif <= 2 * t) {
//过去接第一个老人,发现已经休息完,直接带走
printf("%lld\n", sum + t);
} else if (dif >= 2 * t) {
//过去接第一个老人,发现老人还没有休息完,那就等老人休息完。
printf("%lld\n", sum + dif - t);
}
}
}
int main() {
int t;
scanf("%d", &t);
for (int i = 0; i < t; ++i) {
solve();
}
return 0;
}