結果
| 問題 | No.3740 Troublesome Congestion |
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2026-08-12 15:01:56 |
| 言語 | Python3 (3.14.7 + numpy 2.5.2 + scipy 1.18.0 + ACL) |
| 結果 |
WA
不安定
|
| 実行時間 | - |
| コード長 | 2,772 bytes |
| 記録 | |
| コンパイル時間 | 59 ms |
| コンパイル使用メモリ | 15,488 KB |
| 実行使用メモリ | 12,032 KB |
| 最終ジャッジ日時 | 2026-09-19 12:38:30 |
| 合計ジャッジ時間 | 3,154 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge3_1 |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| 部分点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 = [], []
r = c = 0
vertical = True
while True:
if vertical:
if r + 2 >= N or c + 3 >= N - 1:
break
for y in range(r, r + 3):
for x in range(c, c + 2):
a[y][x] = "."
switches += [(r, c + 2), (r + 1, c + 2)]
exits += [(r, c + 3), (r + 1, c + 3)]
r, c = r + 2, c + 1
else:
if r + 3 >= N - 1 or c + 2 >= N:
break
for y in range(r, r + 2):
for x in range(c, c + 3):
a[y][x] = "."
switches += [(r + 2, c), (r + 2, c + 1)]
exits += [(r + 3, c), (r + 3, c + 1)]
r, c = r + 1, c + 2
vertical = not vertical
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 sorted(range(len(values)), key=lambda i: values[i], reverse=True):
if 0 < values[i] <= m:
m -= values[i]
chosen.append(i)
if m:
return None
upper, lower = [], []
for i in chosen:
r, c = switches[i]
a[r][c] = "P"
put(a, *exits[i])
(upper if exits[i][0] < exits[i][1] else lower).append(exits[i])
connect(a, upper, True)
connect(a, lower, False)
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))