atcoder#ABC193E. [ABC193E] Oversleeping

[ABC193E] Oversleeping

配点 : 500500

問題文

AA と街 BB の間を往復する電車があります。 電車は時刻 00 に街 AA を出発した後、

  • XX 秒かけて街 BB に移動
  • BBYY 秒停車
  • XX 秒かけて街 AA に移動
  • AAYY 秒停車

を繰り返します。 より厳密には、これらは半開区間として扱います。すなわち、n=0,1,2,n = 0, 1, 2, \dots について、

  • (2X+2Y)nt<(2X+2Y)n+X(2X + 2Y)n \leq t < (2X + 2Y)n + X を満たす時刻 tt には電車は街 BB に移動している
  • (2X+2Y)n+Xt<(2X+2Y)n+X+Y(2X + 2Y)n + X \leq t < (2X + 2Y)n + X + Y を満たす時刻 tt には電車は街 BB で停車している
  • (2X+2Y)n+X+Yt<(2X+2Y)n+2X+Y(2X + 2Y)n + X + Y \leq t < (2X + 2Y)n + 2X + Y を満たす時刻 tt には電車は街 AA に移動している
  • (2X+2Y)n+2X+Yt<(2X+2Y)(n+1)(2X + 2Y)n + 2X + Y \leq t < (2X + 2Y)(n + 1) を満たす時刻 tt には電車は街 AA で停車している

が満たされます。

高橋くんは電車に乗って時刻 00 に街 AA を出発し、街 BB で電車を降りようと思っています。 高橋くんは時刻 00 に街 AA を出発した後、

  • PP 秒間眠っている
  • QQ 秒間起きている

を繰り返します。 これらも半開区間として扱います。すなわち、n=0,1,2,n = 0, 1, 2, \dots について、

  • (P+Q)nt<(P+Q)n+P(P + Q)n \leq t < (P + Q)n + P を満たす時刻 tt には高橋くんは眠っている
  • (P+Q)n+Pt<(P+Q)(n+1)(P + Q)n + P \leq t < (P + Q)(n + 1) を満たす時刻 tt には高橋くんは起きている

が満たされます。

BB に電車が停車しており、かつ、高橋くんが起きていれば高橋くんは街 BB で電車を降りることができます。 高橋くんが街 BB で電車を降りることができるか判定し、できる場合は、最短でいつになるか求めてください。 なお、この値はこの問題の制約下で整数になることが証明できます。

TT 個のケースが与えられるので、それぞれについて答えを求めてください。

制約

  • 入力は全て整数
  • 1T101 \leq T \leq 10
  • 1X1091 \leq X \leq 10^9
  • 1Y5001 \leq Y \leq 500
  • 1P1091 \leq P \leq 10^9
  • 1Q5001 \leq Q \leq 500

入力

入力は以下の形式で標準入力から与えられる。

TT

case1\rm case_1

case2\rm case_2

\hspace{9pt}\vdots

caseT\rm case_T

各ケースは以下の形式で与えられる。

XX YY PP QQ

出力

TT 行出力せよ。 ii 行目には、casei\rm case_i についてこの問題を解き、街 BB で電車を降りられる時刻が存在する場合、そのような時刻のうち最小のものを整数で出力せよ。 街 BB で電車を降りられる時刻が存在しない場合、infinity と出力せよ。

3
5 2 7 6
1 1 3 1
999999999 1 1000000000 1
20
infinity
1000000000999999999

[a,b)[a, b) で区間 at<ba \leq t < b を表すことにします。

11 個目のケースでは、電車が街 BB で停車している時刻は [5,7),[19,21),[33,35),[5, 7), [19, 21), [33, 35), \dots 、 高橋くんが起きている時刻は [7,13),[20,26),[33,39),[7, 13), [20, 26), [33, 39), \dots なので、時刻 2020 に初めて街 BB で電車を降りることが出来ます。