結果
問題 | No.1149 色塗りゲーム |
ユーザー | anagohirame |
提出日時 | 2020-08-07 23:15:14 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 201 ms / 2,000 ms |
コード長 | 1,076 bytes |
コンパイル時間 | 283 ms |
コンパイル使用メモリ | 82,536 KB |
実行使用メモリ | 86,452 KB |
平均クエリ数 | 19.06 |
最終ジャッジ日時 | 2024-07-17 05:15:23 |
合計ジャッジ時間 | 9,613 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 50 |
ソースコード
from sys import exit n = int(input()) grundy = [0 for _ in range(n+1)] grundy[1] = 1 #grundy[2] = 2 for i in range(2, n+1): g = set() for j in range(i): g.add(grundy[j] ^ grundy[i-j-1]) if j < i-1: g.add(grundy[j] ^ grundy[i-j-2]) x = 0 while x in g: x += 1 grundy[i] = x #print(grundy) def calc(b): g = 0 tmp = 0 for i in range(n+1): if b[i]: tmp += 1 else: g ^= grundy[tmp] tmp = 0 #print(b, g) #print("#####") return g def cop(b, k, x): res = [True for _ in range(n+1)] res[n] = False for i in range(n): if (not b[i]) or x <= i < x+k: res[i] = False return res a = [True for _ in range(n+1)] a[n] = False while True: for i in range(n): if a[i]: c = cop(a, 1, i) if calc(c) == 0: print(1, i+1, flush=True) a[i] = False break if a[i] and a[i+1]: c = cop(a, 2, i) if calc(c) == 0: print(2, i+1, flush=True) a[i], a[i+1] = False, False break e = int(input()) if e <= 1: exit() elif e == 2: input() exit() k, x = map(int, input().split()) a[x-1], a[x+k-2] = False, False #print(a)