题目链接:
https://codeforces.com/contest/1354/problem/A
解释都在注释里,
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int t ;
int main(){
scanf("%d" ,&t);
while(t--){
long long a, b, c, d ,sum, ans;
scanf("%lld%lld%lld%lld" ,&a ,&b ,&c ,&d); //开long long防止在while循环里运算出错
if(b >= a){printf("%lld\n" , b); continue ;} //特判初始的睡觉时间
if( c <= d) {printf("-1\n"); continue ;} //这样意味着还没入睡,闹钟就响了 , 这样的话睡觉时间永远为0 ,无法醒来
sum = b; //有效睡眠时间和
ans = b; //最后的答案(总共的时间, 包括从躺下到入睡的那段时间)
long long l = 1, r = 10000000000 ; //开大一点
long long mid ;
while( l < r ){ //二分, 防超时
mid = l + (r - l) /2;
if(sum + mid*(c - d)>= a ) {
r = mid;
}
else l = mid + 1;
}
printf("%lld\n" ,ans + l * c);
}
}