結果
| 問題 | No.3744 XY Tiling |
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2026-09-03 04:57:09 |
| 言語 | Python3 (3.14.7 + numpy 2.5.2 + scipy 1.18.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 57 ms / 2,000 ms |
| + 337µs | |
| コード長 | 3,135 bytes |
| 記録 | |
| コンパイル時間 | 60 ms |
| コンパイル使用メモリ | 15,616 KB |
| 実行使用メモリ | 14,336 KB |
| 最終ジャッジ日時 | 2026-09-19 13:05:37 |
| 合計ジャッジ時間 | 5,294 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge2_0 |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| 部分点 | 60 % | AC * 19 |
| 満点 | 40 % | AC * 60 |
| 合計 | 5 * 100% = 500 点 |
ソースコード
import sys
def transpose(sol):
colors, color, direction = sol
h, w = len(color), len(color[0])
nc = [[0] * h for _ in range(w)]
nd = [["?"] * h for _ in range(w)]
conv = {">": "v", "<": "^", "v": ">", "^": "<", "?": "?"}
for r in range(h):
for c in range(w): nc[c][r], nd[c][r] = color[r][c], conv[direction[r][c]]
return colors, nc, nd
def small(h, w):
colors = w // 2 + 1 if h == 1 else 2 if h == 2 else (w + 3) // 4 + 2 if h == 3 else 3
if h == 5 and w >= 10: colors = 4
a, d = [[0] * w for _ in range(h)], [["?"] * w for _ in range(h)]
def horizontal(r):
for c in range(0, w, 2): d[r][c], d[r][c + 1] = ">", "<"
def vertical(r):
for c in range(w): d[r][c], d[r + 1][c] = "v", "^"
if h == 1:
for c in range(w): a[0][c] = (c + 1) // 2
horizontal(0)
elif h == 2:
a[1] = [1] * w; vertical(0)
elif h == 3:
a[1] = [1] * w
for c in range(w): a[2][c] = 1 if c % 4 in (0, 3) else 2 + c // 4
vertical(0); horizontal(2)
elif h == 4:
a[1], a[2], a[3] = [1] * w, [1] * w, [2] * w
vertical(0); vertical(2)
elif w in (6, 8):
rows = ["122223", "121123", "122123", "111123", "222223"] if w == 6 else ["12222223", "12111123", "12211223", "11111123", "22222223"]
a = [[int(x) - 1 for x in row] for row in rows]
horizontal(0)
for c in range(2, w - 2): d[0][c], d[1][c] = "v", "^"
d[1][0], d[1][1], d[1][-2], d[1][-1] = ">", "<", ">", "<"
horizontal(2)
for c in range(w - 2): d[3][c], d[4][c] = "v", "^"
d[3][-2], d[3][-1], d[4][-2], d[4][-1] = ">", "<", ">", "<"
else:
a[0], a[1], a[3], a[4] = [0] * w, [1] * w, [2] * w, [3] * w
a[2] = [1 + c % 2 for c in range(w)]
vertical(0); horizontal(2); vertical(3)
return colors, a, d
def large(h, w):
a, d = [[0] * w for _ in range(h)], [["?"] * w for _ in range(h)]
a[0] = [0] * (w - 1) + [1]
a[1] = [1] * w; a[1][-2] = 0
a[2] = [1] * w; a[2][1] = a[2][-2] = 0
a[3] = [0] * w; a[3][0] = a[3][-1] = 1
for r in range(4, h - 2): a[r] = [1 if c % 2 == 0 else 0 for c in range(w - 2)] + [0, 1]
a[-2], a[-1] = [1] * w, [2] * w
for c in range(w - 2): d[0][c], d[1][c] = "v", "^"
for r in range(4): d[r][-2], d[r][-1] = ">", "<"
d[2][0], d[2][1], d[3][0], d[3][1] = ">", "<", ">", "<"
for c in range(2, w - 2): d[2][c], d[3][c] = "v", "^"
for r in range(4, h - 2):
for c in range(0, w, 2): d[r][c], d[r][c + 1] = ">", "<"
for c in range(w): d[-2][c], d[-1][c] = "v", "^"
return 3, a, d
H, W = map(int, sys.stdin.buffer.read().split())
swapped, h, w = H > W, min(H, W), max(H, W)
ans = small(h, w) if h <= 5 else large(h, w) if w % 2 == 0 else transpose(large(w, h))
if swapped: ans = transpose(ans)
colors, a, d = ans
out = [str(colors)]
for r in range(H):
for c in range(W):
if d[r][c] not in (">", "v"): continue
nr, nc = r + (d[r][c] == "v"), c + (d[r][c] == ">")
out.append(f"{r + 1} {c + 1} {a[r][c] + 1} {nr + 1} {nc + 1} {a[nr][nc] + 1}")
print("\n".join(out))