結果

問題 No.1149 色塗りゲーム
ユーザー mkawa2mkawa2
提出日時 2021-07-05 17:36:26
言語 Python3
(3.12.2 + numpy 1.26.4 + scipy 1.12.0)
結果
TLE  
実行時間 -
コード長 1,979 bytes
コンパイル時間 309 ms
コンパイル使用メモリ 13,056 KB
実行使用メモリ 45,540 KB
平均クエリ数 0.02
最終ジャッジ日時 2024-07-17 11:34:54
合計ジャッジ時間 4,051 ms
ジャッジサーバーID
(参考情報)
judge4 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 88 ms
27,104 KB
testcase_01 TLE -
testcase_02 -- -
testcase_03 -- -
testcase_04 -- -
testcase_05 -- -
testcase_06 -- -
testcase_07 -- -
testcase_08 -- -
testcase_09 -- -
testcase_10 -- -
testcase_11 -- -
testcase_12 -- -
testcase_13 -- -
testcase_14 -- -
testcase_15 -- -
testcase_16 -- -
testcase_17 -- -
testcase_18 -- -
testcase_19 -- -
testcase_20 -- -
testcase_21 -- -
testcase_22 -- -
testcase_23 -- -
testcase_24 -- -
testcase_25 -- -
testcase_26 -- -
testcase_27 -- -
testcase_28 -- -
testcase_29 -- -
testcase_30 -- -
testcase_31 -- -
testcase_32 -- -
testcase_33 -- -
testcase_34 -- -
testcase_35 -- -
testcase_36 -- -
testcase_37 -- -
testcase_38 -- -
testcase_39 -- -
testcase_40 -- -
testcase_41 -- -
testcase_42 -- -
testcase_43 -- -
testcase_44 -- -
testcase_45 -- -
testcase_46 -- -
testcase_47 -- -
testcase_48 -- -
testcase_49 -- -
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys

# sys.setrecursionlimit(200005)
int1 = lambda x: int(x)-1
p2D = lambda x: print(*x, sep="\n")
def II(): return int(sys.stdin.readline())
def LI(): return list(map(int, sys.stdin.readline().split()))
def LI1(): return list(map(int1, sys.stdin.readline().split()))
def LLI(rows_number): return [LI() for _ in range(rows_number)]
def LLI1(rows_number): return [LI1() for _ in range(rows_number)]
def SI(): return sys.stdin.readline().rstrip()
dij = [(0, 1), (-1, 0), (0, -1), (1, 0)]
# dij = [(0, 1), (-1, 0), (0, -1), (1, 0), (1, 1), (1, -1), (-1, 1), (-1, -1)]
inf = 10**16
# md = 998244353
md = 10**9+7

from functools import lru_cache

@lru_cache(None)
def grundy(a):
    if a == 0: return 0
    st = set()
    for l in range(a):
        r = a-1-l
        if r < l: break
        st.add(grundy(l) ^ grundy(r))
    for l in range(a):
        r = a-2-l
        if r < l: break
        st.add(grundy(l) ^ grundy(r))
    for g in range(a+1):
        if g not in st: return g

n = II()
s = [(1, n+1)]
g = grundy(n)

def check(d):
    for i, (l, r) in enumerate(s):
        cur = grundy(r-l)
        for a in range(r-l):
            b = r-l-d
            if a > b: break
            if g ^ cur ^ grundy(a) ^ grundy(b) == 0:
                del s[i]
                if a: s.append((l, l+a))
                if r-l-a-d: s.append((l+a+d, r))
                return l+a
    return -1

def update():
    k, x = LI()
    for i, (l, r) in enumerate(s):
        if l <= x < r:
            del s[i]
            if x-l: s.append((l, x))
            if r-x-k: s.append((x+k, r))
            return grundy(r-l)^grundy(x-l)^grundy(r-x-k)

while 1:
    # print(s)
    ret = check(1)
    if ret != -1:
        print(1, ret, flush=True)
        # print(s)
        t = II()
        if t == 0: exit()
        g=update()
        continue

    ret = check(2)
    if ret != -1:
        print(2, ret, flush=True)
        # print(s)
        t = II()
        if t == 0: exit()
        g=update()
0