結果
| 問題 |
No.102 トランプを奪え
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-15 21:37:39 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,847 bytes |
| コンパイル時間 | 208 ms |
| コンパイル使用メモリ | 81,736 KB |
| 実行使用メモリ | 134,464 KB |
| 最終ジャッジ日時 | 2025-04-15 21:39:58 |
| 合計ジャッジ時間 | 11,506 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 6 TLE * 1 -- * 1 |
ソースコード
import sys
from functools import lru_cache
def main():
sys.setrecursionlimit(1 << 25)
n = list(map(int, sys.stdin.readline().split()))
a, b, c, d = n
@lru_cache(maxsize=None)
def dfs(a, b, c, d, turn, taro, jiro):
if a + b + c + d == 0:
return taro - jiro
best = -float('inf') if turn == 0 else float('inf')
piles = [a, b, c, d]
for i in range(4):
if piles[i] == 0:
continue
for take in range(1, 4):
if take > piles[i]:
break
new_piles = list(piles)
new_piles[i] -= take
na, nb, nc, nd = new_piles
new_taro, new_jiro = taro, jiro
if turn == 0:
new_taro += take
else:
new_jiro += take
if new_piles[i] == 0:
if turn == 0:
steal = (new_jiro + 1) // 2
new_taro += steal
new_jiro -= steal
else:
steal = (new_taro + 1) // 2
new_jiro += steal
new_taro -= steal
if turn == 0:
res = dfs(na, nb, nc, nd, 1, new_taro, new_jiro)
if res > best:
best = res
else:
res = dfs(na, nb, nc, nd, 0, new_taro, new_jiro)
if res < best:
best = res
return best if best != -float('inf') and best != float('inf') else 0
total_diff = dfs(a, b, c, d, 0, 0, 0)
if total_diff > 0:
print("Taro")
elif total_diff < 0:
print("Jiro")
else:
print("Draw")
if __name__ == "__main__":
main()
lam6er