睡a分钟才可以下床,假设在第0分钟睡着,那么第一个闹铃会在b分钟后响。每次醒来,都会决定是否要再睡一段时间,如果他总共睡的时间小于a分钟,那么他就会设置闹钟在c分钟之后再次响起,然后再花费d分钟重新入睡。如果起不了床了输出-1,否则输出从床上起来需要的时间。
如果b>=a可以睡够,就直接输出b这个醒来的时间,如果c<=d则永远不会睡着,输出-1
如果(a - b) % (c - d)不能被整除就向上取整,进行+1操作
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
int main() {
int t;
scanf("%d", &t);
while (t--) {
ll a, b, c, d;
scanf("%lld %lld %lld %lld", &a, &b, &c, &d);
if (b >= a) {
cout << b << endl;
continue;
}
if (c <= d) {
cout << -1 << endl;
continue;
}
ll sum = 0;
if ((a - b) % (c - d) == 0)
sum = (a - b) / (c - d);
else
sum = (a - b) / (c - d) + 1;
sum = b + sum * c;
printf("%lld\n", sum);
}
return 0;
}