結果

問題 No.3791 Full House Torus
コンテスト
ユーザー hiro1729
提出日時 2026-09-15 18:36:21
言語 PyPy3
(8.0.1 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 2,954 ms / 4,000 ms
+ 585µs
コード長 2,500 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 106 ms
コンパイル使用メモリ 64,632 KB
実行使用メモリ 96,644 KB
最終ジャッジ日時 2026-11-06 20:51:06
合計ジャッジ時間 9,299 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge4_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 11
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

# made by Claude

import sys

# ---- 基点となる行パターン ----
BASE5 = ("01010", "10011", "01100")               # H=5 用, W=5  (A,B,C)
BASE7 = ("0101010", "1100011", "0011100")          # H=5 用, W=7  (A,B,C)
PATCH = ("0101", "1001", "0110")                   # W += 4 用の共通パッチ(先頭に付加)

BASE3_W5 = ("00011", "01100", "11001")             # H=3 用, W=5
PATCH3_W5 = ("0011", "0110", "1100")               # H=3, W%4==1 系列のパッチ

BASE3_W7 = ("0010011", "1100110", "1011000")       # H=3 用, W=7
PATCH3_W7 = ("0010", "1100", "1011")               # H=3, W%4==3 系列のパッチ


def _grow_rows(rows, patches, times):
    """各行の先頭に patches を times 回 prepend する"""
    rows = list(rows)
    for _ in range(times):
        rows = [p + r for p, r in zip(patches, rows)]
    return rows


def _build_5plus_family(H: int, W: int):
    """H(奇数,>=5) x W(奇数,>=5) を構成する ( A,B,(C,B)*m,A 型 )"""
    if W % 4 == 1:
        A, B, C = BASE5
        k = (W - 5) // 4
    else:  # W % 4 == 3
        A, B, C = BASE7
        k = (W - 7) // 4
    A, B, C = _grow_rows((A, B, C), PATCH, k)

    m = (H - 5) // 2
    rows = [A, B]
    for _ in range(m):
        rows += [C, B]
    rows += [C, B, A]
    return rows


def _build_3row_family(W: int):
    """H=3 x W(奇数,>=5) を構成する"""
    if W % 4 == 1:
        base, patch, w0 = BASE3_W5, PATCH3_W5, 5
    else:  # W % 4 == 3
        base, patch, w0 = BASE3_W7, PATCH3_W7, 7
    k = (W - w0) // 4
    return _grow_rows(base, patch, k)


def _transpose(rows):
    H, W = len(rows), len(rows[0])
    return ["".join(rows[i][j] for i in range(H)) for j in range(W)]


def solve(H: int, W: int):
    """H x W の条件を満たすグリッドを構成する。存在しない場合は None を返す。"""
    if H % 2 == 0:
        return ["0" * W if i % 2 == 0 else "1" * W for i in range(H)]
    if W % 2 == 0:
        row = "".join("0" if j % 2 == 0 else "1" for j in range(W))
        return [row for _ in range(H)]

    # ここから H, W はともに奇数
    if H == 3 and W == 3:
        return None
    if H == 3:
        return _build_3row_family(W)
    if W == 3:
        return _transpose(_build_3row_family(H))
    return _build_5plus_family(H, W)

T = int(input())

for _ in range(T):
    H, W = map(int, sys.stdin.readline().split())
    grid = solve(H, W)
    if grid is None:
        print("No")
        continue
    print("Yes")
    print("\n".join(grid))

0