結果
| 問題 | No.3740 Troublesome Congestion |
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2026-08-12 15:02:32 |
| 言語 | Python3 (3.14.7 + numpy 2.5.2 + scipy 1.18.0 + ACL) |
| 結果 |
WA
不安定
|
| 実行時間 | - |
| コード長 | 2,180 bytes |
| 記録 | |
| コンパイル時間 | 61 ms |
| コンパイル使用メモリ | 15,488 KB |
| 実行使用メモリ | 11,904 KB |
| 最終ジャッジ日時 | 2026-09-19 12:38:32 |
| 合計ジャッジ時間 | 3,294 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge1_0 |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| 部分点1 | 20 % | AC * 7 |
| 部分点2 | 30 % | AC * 7 WA * 5 |
| 満点 | 50 % | AC * 7 WA * 19 |
| 合計 | 4 * 20% = 80 点 |
ソースコード
import sys
N = 40
def put(a, r, c):
if 0 <= r < N and 0 <= c < N and a[r][c] != "P":
a[r][c] = "."
def connect(a, cells, upper):
if not cells:
return
cells.sort()
r, c = cells[0]
for nr, nc in cells[1:]:
if upper:
for x in range(c, nc + 1): put(a, r, x)
for y in range(r, nr + 1): put(a, y, nc)
else:
for y in range(r, nr + 1): put(a, y, c)
for x in range(c, nc + 1): put(a, nr, x)
r, c = nr, nc
if upper:
for x in range(c, N): put(a, r, x)
for y in range(r, N): put(a, y, N - 1)
else:
for y in range(r, N): put(a, y, c)
for x in range(c, N): put(a, N - 1, x)
def build(m):
a = [["#"] * N for _ in range(N)]
switches, exits = [], []
for k in range(N - 4):
for r in range(k, k + 2):
for c in range(k, k + 2):
a[r][c] = "."
switches.append((k, k + 2))
exits.append((k, k + 3))
# 鎖から集約路へ直接抜ける経路には P を2回踏ませる。
for r in range(N):
for c in range(N):
if (r in (N - 3, N - 2) or c in (N - 3, N - 2)) and a[r][c] == ".":
a[r][c] = "P"
dp = [[0] * N for _ in range(N)]
dp[0][0] = 1
for r in range(N):
for c in range(N):
if (r or c) and a[r][c] == ".":
dp[r][c] = (dp[r - 1][c] if r else 0) + (dp[r][c - 1] if c else 0)
values = [(dp[r - 1][c] if r else 0) + (dp[r][c - 1] if c else 0)
for r, c in switches]
chosen = []
for i in range(len(values) - 1, -1, -1):
if values[i] <= m:
m -= values[i]
chosen.append(i)
if m:
return None
upper = []
for i in chosen:
r, c = switches[i]
a[r][c] = "P"
put(a, *exits[i])
upper.append(exits[i])
connect(a, upper, True)
a[0][0] = a[-1][-1] = "."
return a
data = list(map(int, sys.stdin.buffer.read().split()))
answer = []
for m in data[1:]:
grid = build(m)
answer += ["-1"] if grid is None else [str(N)] + ["".join(row) for row in grid]
print("\n".join(answer))