結果
問題 | No.669 対決!!! 飲み比べ |
ユーザー |
|
提出日時 | 2018-04-01 22:29:41 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 33 ms / 2,000 ms |
コード長 | 1,688 bytes |
コンパイル時間 | 250 ms |
コンパイル使用メモリ | 12,416 KB |
実行使用メモリ | 10,752 KB |
最終ジャッジ日時 | 2024-06-26 05:55:48 |
合計ジャッジ時間 | 1,966 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 25 |
ソースコード
def main():"""酒の種類: 1 ≤ N ≤ 1000000一度に飲める量: 1 ≤ K ≤ 1000各種類の酒の量: 0 ≤ Ai≤ 1000000先手で勝てるか?(酒の残りがなく、飲めなくなったら負け)石取りゲームと同じ?解説: Nim, Grundy数Nimにおいて取れる石の数が1~Kとなったバージョンの問題である。以下、Nimの言葉で書く。Grundy数は各山のGrundy数全てのxorである。各山のGrundy数は(石の個数)%(K+1)である。この事は帰納法で簡単に示せる。後は実装するだけ。https://yukicoder.me/problems/no/669/editorialhttp://yang33-kassa.hatenablog.com/entry/2017/12/21/202812ニコ生コメント各山の個数をmod(K+1)したゲームの必勝側は、各山のmod(K+1)を不変に保てるので、結局ただのNimになる、と考えると簡単先手が必ずxor 0 で後手に渡せるから勝てる各山の個数をmod(K+1)したゲームの必勝側は、各山のmod(K+1)を不変に保てるので、結局普通のNimになる、と考えると簡単石取りゲームの必勝法 ~ 二進法と XOR ~: 秋葉さんの解説動画https://www.youtube.com/watch?v=DfR0vQZoa1Y"""N,K = map(int,input().split())*A, = map(int,input().split())editorial(N, K, A)def editorial(N, K, A):t = 0for a in A:grundy_num = a % (K + 1)t ^= grundy_numans = "YES"if t == 0:ans = "NO"print(ans)if __name__ == '__main__':main()