結果
| 問題 |
No.1149 色塗りゲーム
|
| コンテスト | |
| ユーザー |
Kiri8128
|
| 提出日時 | 2020-07-06 22:11:21 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 195 ms / 2,000 ms |
| コード長 | 1,172 bytes |
| コンパイル時間 | 256 ms |
| コンパイル使用メモリ | 12,928 KB |
| 実行使用メモリ | 28,000 KB |
| 平均クエリ数 | 20.92 |
| 最終ジャッジ日時 | 2024-07-17 03:58:05 |
| 合計ジャッジ時間 | 9,129 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 50 |
ソースコード
def mex(S):
a = 0
while 1:
if a not in S:
return a
a += 1
X = [0]
for i in range(1, 101):
S = set()
S.add(X[i-1])
if i >= 2: S.add(X[i-2])
for j in range(1, i - 1):
S.add(X[j] ^ X[i - j - 1])
for j in range(1, i - 2):
S.add(X[j] ^ X[i - j - 2])
X.append(mex(S))
def grundy(Y, i, j):
nY = Y[:]
nY[j] = 1
if i == 2: nY[j+1] = 1
tmp = [len(a) for a in ("".join(map(str, nY))).split("1") if a]
s = 0
for t in tmp:
s ^= X[t]
return s
def calc(Y):
F = [(1, j) for j in range(N)] + [(2, j) for j in range(N - 1)]
ans = (-1, -1)
for i, j in F:
if Y[j]: continue
if i == 2 and Y[j+1]: continue
if grundy(Y, i, j) == 0:
Y[j] = 1
if i == 2: Y[j+1] = 1
return (i, j)
if ans == (-1, -1):
ans = (i, j)
i, j = ans
Y[j] = 1
if i == 2: Y[j+1] = 1
return ans
N = int(input())
Y = [0] * N
while 1:
k, x = calc(Y)
print(k, x + 1)
t = int(input())
if t <= 1:
break
k, x = map(int, input().split())
Y[x-1] = 1
if k == 2: Y[x] = 1
Kiri8128