题目描述
街 A と街 B の間を往復する電車があります。 電車は時刻 0 に街 A を出発した後、
- X 秒かけて街 B に移動
- 街 B で Y 秒停車
- X 秒かけて街 A に移動
- 街 A で Y 秒停車
を繰り返します。
より厳密には、これらは半開区間として扱います。すなわち、n = 0, 1, 2, … について、
- (2X + 2Y)n < = t < (2X + 2Y)n + X を満たす時刻 t には電車は街 B に移動している
- $ (2X\ +\ 2Y)n\ +\ X\ <\ =\ t\ <\ (2X\ +\ 2Y)n\ +\ X\ +\ Y $ を満たす時刻 t には電車は街 B で停車している
- $ (2X\ +\ 2Y)n\ +\ X\ +\ Y\ <\ =\ t\ <\ (2X\ +\ 2Y)n\ +\ 2X\ +\ Y $ を満たす時刻 t には電車は街 A に移動している
- $ (2X\ +\ 2Y)n\ +\ 2X\ +\ Y\ <\ =\ t\ <\ (2X\ +\ 2Y)(n\ +\ 1) $ を満たす時刻 t には電車は街 A で停車している
が満たされます。
高橋くんは電車に乗って時刻 0 に街 A を出発し、街 B で電車を降りようと思っています。 高橋くんは時刻 0 に街 A を出発した後、
- P 秒間眠っている
- Q 秒間起きている
を繰り返します。
これらも半開区間として扱います。すなわち、n = 0, 1, 2, … について、
- (P + Q)n < = t < (P + Q)n + P を満たす時刻 t には高橋くんは眠っている
- (P + Q)n + P < = t < (P + Q)(n + 1) を満たす時刻 t には高橋くんは起きている
が満たされます。
街 B に電車が停車しており、かつ、高橋くんが起きていれば高橋くんは街 B で電車を降りることができます。
高橋くんが街 B で電車を降りることができるか判定し、できる場合は、最短でいつになるか求めてください。
なお、この値はこの問題の制約下で整数になることが証明できます。
T 個のケースが与えられるので、それぞれについて答えを求めてください。
输入格式
入力は以下の形式で標準入力から与えられる。
T case1 case2 ⋮ caseT
各ケースは以下の形式で与えられる。
X Y P Q
输出格式
T 行出力せよ。
i 行目には、 casei についてこの問題を解き、街 B で電車を降りられる時刻が存在する場合、そのような時刻のうち最小のものを整数で出力せよ。 街 B で電車を降りられる時刻が存在しない場合、infinity
と出力せよ。
题目大意
一个人坐公交从 A 站坐到 B 站,公交车先用 x 秒到 B 站,然后在 B 站停 y 秒,再用 x 秒到 A 站,再在 A 站停 y 秒,如此循环往复。而这个人先睡眠 p 秒,再醒来 q 秒,如此循环往复。求这个人最早何时能在 B 站下车,若永远不能,输出 infinity。
3
5 2 7 6
1 1 3 1
999999999 1 1000000000 1
20
infinity
1000000000999999999
提示
制約
- 入力は全て整数
- 1 < = T < = 10
- 1 < = X < = 109
- 1 < = Y < = 500
- 1 < = P < = 109
- 1 < = Q < = 500
Sample Explanation 1
[a, b) で区間 a < = t < b を表すことにします。 1 個目のケースでは、電車が街 B で停車している時刻は [5, 7), [19, 21), [33, 35), … 、 高橋くんが起きている時刻は [7, 13), [20, 26), [33, 39), … なので、時刻 20 に初めて街 B で電車を降りることが出来ます。