結果
| 問題 |
No.3112 Decrement or Mod Game
|
| コンテスト | |
| ユーザー |
aaaaaaaaaaa
|
| 提出日時 | 2025-04-19 00:18:51 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,228 bytes |
| コンパイル時間 | 353 ms |
| コンパイル使用メモリ | 12,416 KB |
| 実行使用メモリ | 121,104 KB |
| 最終ジャッジ日時 | 2025-04-19 00:18:56 |
| 合計ジャッジ時間 | 4,227 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 3 |
| other | AC * 2 TLE * 1 -- * 62 |
ソースコード
import sys
# 尝试增加递归深度限制
try:
# 设置一个足够大的值,例如 200000 或更大
# 具体需要多大取决于 A, B 的值和游戏路径
sys.setrecursionlimit(200000)
except Exception as e:
# 在某些环境可能无法设置,打印警告
print(f"Warning: Could not set recursion depth limit. {e}")
memo = {} # 记忆化字典
def canWin(A, B):
# Base case 1: 对手 B 的数字 <= 0, 当前玩家 A 获胜
if B <= 0:
return True
# Base case 2: 当前玩家 A 的数字 <= 0, 当前玩家 A 失败
if A <= 0:
return False
# 检查记忆化
state = (A, B)
if state in memo:
return memo[state]
# Base case 3: 检查 A 是否能通过一步操作获胜
# 3a: 如果 A = 1, 可以 A -> 0 获胜
if A == 1:
memo[state] = True
return True
# 3b: 如果 B <= A 且 A 是 B 的倍数, 可以 A -> A mod B = 0 获胜
# (B > 0 隐含在此处,因为 B <= 0 已被处理)
if B <= A and A % B == 0:
memo[state] = True
return True
# 应用核心假设: 如果 A >= 2*B,当前玩家 A 必胜
# (B > 0 隐含在此处)
if A >= 2 * B:
memo[state] = True
return True
# 递归情况
# 情况 1: A < B
if A < B:
# 唯一操作 A -> A-1. 检查对手是否从 (B, A-1) 失败
result = not canWin(B, A - 1)
memo[state] = result
return result
# 情况 2: B <= A < 2B (且 A % B != 0)
else:
# 尝试操作 A -> A mod B = A - B. 检查对手是否从 (B, A-B) 失败
win_by_mod = not canWin(B, A - B)
if win_by_mod:
memo[state] = True
return True
# 尝试操作 A -> A - 1. 检查对手是否从 (B, A-1) 失败
win_by_dec = not canWin(B, A - 1)
if win_by_dec:
memo[state] = True
return True
# 若两种主要操作都不能确保胜利,则当前状态为必败
memo[state] = False
return False
# 读取输入
A, B = map(int, sys.stdin.readline().split())
# Alice 先手,判断 Alice 是否能从 (A, B) 状态获胜
if canWin(A, B):
print("Alice")
else:
print("Bob")
aaaaaaaaaaa