結果
問題 |
No.102 トランプを奪え
|
ユーザー |
![]() |
提出日時 | 2025-06-12 18:52:21 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 826 ms / 5,000 ms |
コード長 | 1,821 bytes |
コンパイル時間 | 190 ms |
コンパイル使用メモリ | 82,036 KB |
実行使用メモリ | 116,036 KB |
最終ジャッジ日時 | 2025-06-12 18:52:37 |
合計ジャッジ時間 | 4,027 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 8 |
ソースコード
from functools import lru_cache def main(): import sys sys.setrecursionlimit(1 << 25) input = sys.stdin.readline().strip() n = list(map(int, input.split())) n.sort() @lru_cache(maxsize=None) def compute(a, b, c, d, t, j, is_taro): if a == 0 and b == 0 and c == 0 and d == 0: return t - j piles = [a, b, c, d] max_diff = -float('inf') if is_taro else float('inf') for i in range(4): if piles[i] == 0: continue for k in [1, 2, 3]: if piles[i] < k: continue new_piles = piles.copy() new_piles[i] -= k new_piles_sorted = sorted(new_piles) new_t, new_j = t, j if is_taro: new_t += k else: new_j += k if new_piles[i] == 0: if is_taro: steal = (new_j + 1) // 2 new_t += steal new_j -= steal else: steal = (new_t + 1) // 2 new_j += steal new_t -= steal res = compute(new_piles_sorted[0], new_piles_sorted[1], new_piles_sorted[2], new_piles_sorted[3], new_t, new_j, not is_taro) if is_taro: if res > max_diff: max_diff = res else: if res < max_diff: max_diff = res return max_diff result = compute(n[0], n[1], n[2], n[3], 0, 0, True) if result > 0: print("Taro") elif result < 0: print("Jiro") else: print("Draw") if __name__ == "__main__": main()