結果
| 問題 | No.3633 Rabbit and turtle |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-08-21 22:13:41 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 240 ms / 2,000 ms |
| + 695µs | |
| コード長 | 984 bytes |
| 記録 | |
| コンパイル時間 | 246 ms |
| コンパイル使用メモリ | 95,720 KB |
| 実行使用メモリ | 85,248 KB |
| 最終ジャッジ日時 | 2026-08-21 22:13:45 |
| 合計ジャッジ時間 | 4,058 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 16 |
ソースコード
import math
def solve(A, B, D, R):
# 0 -> D -> D - R
# 次にちょうど0になるのは?
# ア! xD = yR となるなんか。
# x + y 周期になる。それでxD 進む
# 何回進めるかで二分探索できるね。
# あ、Ax = B(x + y) じゃないとダメか?
# R <= D ってめっちゃ大事な制約だな
g = math.gcd(R, D)
x = R // g
y = D // g
if A * x > B * (x + y): return "rabbit"
if A * x < B * (x + y): return "turtle"
mod = pow(10, 100, x + y)
# D 回進めますか?
l = 0
r = x + 1
while r - l > 1:
mid = (l + r) >> 1
# 差がD未満
cnt = mid + ((mid - 1) * D + R - 1) // R
if cnt <= mod: l = mid
else: r = mid
if A * l > B * mod: return "rabbit"
if A * l < B * mod: return "turtle"
return "tie"
# return "wakaran"
T = int(input())
for _ in range(T):
A, B, D, R = map(int, input().split())
print(solve(A, B, D, R))