結果
問題 | No.1506 Unbalanced Pocky Game |
ユーザー |
|
提出日時 | 2022-11-20 09:36:14 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 692 ms / 2,000 ms |
コード長 | 1,164 bytes |
コンパイル時間 | 859 ms |
コンパイル使用メモリ | 81,792 KB |
実行使用メモリ | 375,164 KB |
最終ジャッジ日時 | 2024-09-21 10:58:12 |
合計ジャッジ時間 | 18,959 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 63 |
ソースコード
import sysreadline = sys.stdin.readlinesys.setrecursionlimit((10 ** 5) * 3)import pypyjitpypyjit.set_param('max_unroll_recursion=-1')N = int(readline())A = list(map(int,readline().split()))[::-1]# Aiを渡されたときに取れる選択肢:# ・次の数Ai+1を渡す# ・今の数Aiを1にして渡す(Ai > 1)# N+1個目を渡されたとき負けなので、N番目を渡されたときは勝ち# 状態[i][p] = i番目の要素を、p:1=2以上で渡された、p:0=1で渡されたmem = [[False] * 2 for i in range(N)]win = [[False] * 2 for i in range(N)]mem[-1][0] = Truemem[-1][1] = Truewin[-1][0] = Truewin[-1][1] = True# 最後の要素を渡されたら勝ちなのでdef f(ind, p):if mem[ind][p]:return win[ind][p]res = Falseif p: # 1以上で渡された場合、1にして渡すことが出来るres |= not f(ind, 0)# 次の数を渡すことが出来るres |= not f(ind + 1, 1 if A[ind + 1] > 1 else 0) # 次の数が1より大きいかmem[ind][p] = Truewin[ind][p] = resreturn resif f(0, 1 if A[0] > 1 else 0):print("Alice")else:print("Bob")