結果
| 問題 | No.3791 Full House Torus |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-09-15 19:46:28 |
| 言語 | PyPy3 (8.0.1 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 2,866 ms / 4,000 ms |
| + 41µs | |
| コード長 | 2,506 bytes |
| 記録 | |
| コンパイル時間 | 105 ms |
| コンパイル使用メモリ | 64,520 KB |
| 実行使用メモリ | 96,364 KB |
| 最終ジャッジ日時 | 2026-11-06 20:51:35 |
| 合計ジャッジ時間 | 9,425 ms |
|
ジャッジサーバーID (参考情報) |
judge4_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 11 |
ソースコード
# 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")
for s in grid:
print(s)