CF1354A Alarm Clock
题目描述
Polycarp 花了一整天为你准备题目。现在他需要至少睡 $a$ 分钟才能恢复精力。
Polycarp 只能通过闹钟的声音醒来。所以他刚刚入睡,第一次闹钟将在 $b$ 分钟后响起。
每次 Polycarp 醒来时,他会决定是否要继续睡觉。如果他总共睡眠的时间少于 $a$ 分钟,那么他会将闹钟重新设定为 $c$ 分钟后响起,并花费 $d$ 分钟再次入睡。否则,他会起床开始新的一天。
如果闹钟在 Polycarp 入睡过程中响起,他会再次将闹钟设定为 $c$ 分钟后响起,并再次尝试花 $d$ 分钟入睡。
你需要判断 Polycarp 什么时候能起床,或者报告他永远无法起床。
请参考样例说明部分以获得更详细的解释。
输入格式
第一行包含一个整数 $t$($1 \le t \le 1000$),表示测试用例的数量。
每个测试用例包含一行,包含四个整数 $a, b, c, d$($1 \le a, b, c, d \le 10^9$),分别表示 Polycarp 需要睡眠的时间、第一次闹钟响起的时间、每次之后闹钟响起的时间以及 Polycarp 入睡所需的时间。
输出格式
对于每个测试用例,输出一个整数。如果 Polycarp 永远无法起床,则输出 $-1$。否则,输出 Polycarp 起床所需的总时间。
说明/提示
在第一个测试用例中,Polycarp 在 $3$ 分钟后醒来。他只休息了 $3$ 分钟,而他需要 $10$ 分钟。因此,他将闹钟重新设定为 $6$ 分钟后响起,并花 $4$ 分钟入睡。这样,他又休息了 $2$ 分钟,总共睡了 $3+2=5$ 分钟。然后他重复这个过程三次,最终总共睡了 $11$ 分钟。最后,他起床了。他在第一次闹钟响起前花了 $3$ 分钟,然后又重设了闹钟四次。答案是 $3+4 \times 6 = 27$。
第二个样例与第一个几乎相同,只是 Polycarp 需要 $11$ 分钟的睡眠而不是 $10$ 分钟。然而,这并没有改变结果,因为他用这些闹钟参数同样可以获得 $11$ 分钟的睡眠。
在第三个测试用例中,Polycarp 在第一次闹钟响起后就已经休息够了。因此,答案是 $b=9$。
在第四个测试用例中,Polycarp 在 $5$ 分钟后醒来。不幸的是,他会无限次地重设闹钟,甚至无法休息一分钟 :(
由 ChatGPT 4.1 翻译