AT_abc193_e [ABC193E] Oversleeping
题目描述
有一列往返于城市 $A$ 和城市 $B$ 之间的火车。火车在时刻 $0$ 从城市 $A$ 出发,之后按照以下流程循环:
- 用 $X$ 秒移动到城市 $B$;
- 在城市 $B$ 停留 $Y$ 秒;
- 用 $X$ 秒移动回城市 $A$;
- 在城市 $A$ 停留 $Y$ 秒。
更严格地说,这些时间段被视为半开区间。即,对于 $n = 0, 1, 2, \dots$,有:
- 在满足 $(2X + 2Y)n \leq t < (2X + 2Y)n + X$ 的时刻 $t$,火车正在前往城市 $B$;
- 在满足 $(2X + 2Y)n + X \leq t < (2X + 2Y)n + X + Y$ 的时刻 $t$,火车停在城市 $B$;
- 在满足 $(2X + 2Y)n + X + Y \leq t < (2X + 2Y)n + 2X + Y$ 的时刻 $t$,火车正在返回城市 $A$;
- 在满足 $(2X + 2Y)n + 2X + Y \leq t < (2X + 2Y)(n + 1)$ 的时刻 $t$,火车停在城市 $A$。
高桥君乘坐火车,并在时刻 $0$ 从城市 $A$ 出发,打算在城市 $B$ 下车。高桥君在时刻 $0$ 出发后,按照以下循环:
- 睡 $P$ 秒;
- 醒 $Q$ 秒。
这些时间段同样被视为半开区间。即,对于 $n = 0, 1, 2, \dots$,有:
- 在满足 $(P + Q)n \leq t < (P + Q)n + P$ 的时刻 $t$,高桥君在睡觉;
- 在满足 $(P + Q)n + P \leq t < (P + Q)(n + 1)$ 的时刻 $t$,高桥君是清醒的。
只有当火车停在城市 $B$,且高桥君是清醒的时,他才能在城市 $B$ 下车。
请判断高桥君是否有可能在城市 $B$ 下车。如果可以,请求出最早能下车的时刻。如果不能,请输出 `infinity`。
已知在本题的约束下,答案一定为整数。
给定 $T$ 组数据,请分别输出每组的答案。
输入格式
输入通过标准输入给出,格式如下:
> $T$
> $\rm case_1$
> $\rm case_2$
> $\hspace{9pt}\vdots$
> $\rm case_T$
每组数据格式如下:
> $X$ $Y$ $P$ $Q$
输出格式
输出 $T$ 行。
第 $i$ 行输出第 $i$ 组数据的答案。如果存在能在城市 $B$ 下车的时刻,输出最小的那个时刻(整数);如果不存在,输出 `infinity`。
说明/提示
### 数据范围
- 所有输入均为整数
- $1 \leq T \leq 10$
- $1 \leq X \leq 10^9$
- $1 \leq Y \leq 500$
- $1 \leq P \leq 10^9$
- $1 \leq Q \leq 500$
### 样例解释 1
用 $[a, b)$ 表示区间 $a \leq t < b$。对于第 $1$ 组数据,火车在城市 $B$ 停车的时刻为 $[5, 7), [19, 21), [33, 35), \dots$,高桥君清醒的时刻为 $[7, 13), [20, 26), [33, 39), \dots$,因此他第一次能在时刻 $20$ 在城市 $B$ 下车。
由 ChatGPT 4.1 翻译