結果
問題 | No.3090 NimNim |
ユーザー |
![]() |
提出日時 | 2025-04-06 05:22:30 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 91 ms / 2,000 ms |
コード長 | 1,362 bytes |
コンパイル時間 | 450 ms |
コンパイル使用メモリ | 82,344 KB |
実行使用メモリ | 102,964 KB |
最終ジャッジ日時 | 2025-04-06 05:22:35 |
合計ジャッジ時間 | 4,804 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 26 |
ソースコード
""" Aを0にしてしまったほうがBを操作するわけだ Bを操作しなければ負けない Misere Nim https://sigma425.hatenablog.com/entry/2014/12/07/132702 で先手勝ちならば、先手勝ち そうでない場合、Bを交互に行うのでこれはNim Misere --- ちゃんと考えよう 逆Nimで先手が勝てるならば、後手がずっとBを操作することになる。 -> 先手勝ち 逆Nimで先手が勝てない場合. - どう操作しても、先手がAの最後を取らされてしまう。 Aを通常Nimと見た場合 先手勝ち: 上手くやることで、先手が最後を取れる。 後手勝ち: 上手くやると、後手が最後を取れる。-> つまり、後手は自由にBを先にどちらが操作するか選択可能 -> 減らしまくって最後に先手に投げつけると勝てる 逆Nimで先手が勝てず、 """ import sys from sys import stdin N,M = map(int,stdin.readline().split()) A = list(map(int,stdin.readline().split())) B = list(map(int,stdin.readline().split())) axor = 0 for a in A: axor ^= a bxor = 0 for b in B: bxor ^= b # 逆Nimで先手勝ち if not ((max(A) > 1 and axor==0) or (max(A)==1 and axor==1)): print ("First") elif axor == 0: print ("Second") elif bxor == 0: print ("Second") else: print ("First")