結果

問題 No.3661 Grid Paint Game
コンテスト
ユーザー 回転
提出日時 2026-08-30 14:52:10
言語 PyPy3
(7.3.23)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 249 ms / 2,000 ms
+ 312µs
コード長 2,285 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 273 ms
コンパイル使用メモリ 95,720 KB
実行使用メモリ 84,992 KB
最終ジャッジ日時 2026-08-30 14:52:23
合計ジャッジ時間 3,055 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 8
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

def naive(H,W):

    grid = [["@" for _ in range(W)] for _ in range(H)]
    can = set(range(H+W))
    def f():
        nonlocal can
        if(not can):
            return 2 * sum(sum(grid[i][j] == "#" for j in range(W)) for i in range(H)) - H*W >= 0

        for i in list(can):
            if(i < H):
                can.remove(i)
                memo = grid[i][:]
                grid[i] = ["#"] * W
                if(g()):
                    can.add(i)
                    grid[i] = memo[:]
                    return True
                else:
                    can.add(i)
                    grid[i] = memo[:]
            else:
                can.remove(i)
                memo = [grid[j][i-H] for j in range(H)]
                for j in range(H):grid[j][i-H] = "#"
                if(g()):
                    can.add(i)
                    for j in range(H):grid[j][i-H] = memo[j]
                    return True
                else:
                    can.add(i)
                    for j in range(H):grid[j][i-H] = memo[j]

        return False

    def g():
        nonlocal can
        if(not can):
            return 2 * sum(sum(grid[i][j] == "#" for j in range(W)) for i in range(H)) - H*W >= 0

        for i in list(can):
            if(i < H):
                can.remove(i)
                memo = grid[i][:]
                grid[i] = ["."] * W
                if(not f()):
                    can.add(i)
                    grid[i] = memo[:]
                    return False
                else:
                    can.add(i)
                    grid[i] = memo[:]
            else:
                can.remove(i)
                memo = [grid[j][i-H] for j in range(H)]
                for j in range(H):grid[j][i-H] = "."
                if(not f()):
                    can.add(i)
                    for j in range(H):grid[j][i-H] = memo[j]
                    return False
                else:
                    can.add(i)
                    for j in range(H):grid[j][i-H] = memo[j]
        return True

    return f()

# for i in range(1,10):
#     for j in range(1,10):
#         print(i,j,"🔶" if naive(i,j) else "🔷")

T = int(input())
for _ in range(T):
    H,W = list(map(int,input().split()))

    print("sepa" if (H+W) % 2 == 1 else "ryota")
0