結果
| 問題 | No.3740 Troublesome Congestion |
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2026-07-09 12:27:43 |
| 言語 | Python3 (3.14.7 + numpy 2.5.2 + scipy 1.18.0 + ACL) |
| 結果 |
WA
不安定
|
| 実行時間 | - |
| コード長 | 2,939 bytes |
| 記録 | |
| コンパイル時間 | 60 ms |
| コンパイル使用メモリ | 15,104 KB |
| 実行使用メモリ | 11,264 KB |
| 最終ジャッジ日時 | 2026-09-19 12:32:13 |
| 合計ジャッジ時間 | 2,162 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_0 |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| 部分点1 | 20 % | WA * 7 |
| 部分点2 | 30 % | WA * 12 |
| 満点 | 50 % | WA * 26 |
| 合計 | 4 * 0% = 0 点 |
ソースコード
import sys
N = 50
K = 31
H = 16 # first 16 stages use horizontal-continuation gadgets
def build_binary(M):
if not (0 <= M < (1 << K)):
return None
G = [['#'] * N for _ in range(N)]
r, c = 0, 0
G[r][c] = '.'
for k in range(K):
if k < H:
# State cell (r, c) has 2^k paths.
#
# Optional switch:
# go down to P, then continue down to bottom row.
#
# Main route:
# go right, then pass through a 2-way diamond.
if (M >> k) & 1:
pr, pc = r + 1, c
G[pr][pc] = 'P'
# unique suffix after pressing P
for rr in range(pr + 1, N):
if G[rr][pc] != 'P':
G[rr][pc] = '.'
for cc in range(pc, N):
if G[N - 1][cc] != 'P':
G[N - 1][cc] = '.'
# binary doubling gadget
# continue to C = (r, c+1), then 2 paths to next state
cells = [
(r, c + 1),
(r, c + 2),
(r + 1, c + 1),
(r + 1, c + 2),
]
for rr, cc in cells:
if G[rr][cc] != 'P':
G[rr][cc] = '.'
r, c = r + 1, c + 2
G[r][c] = '.'
else:
# State cell (r, c) has 2^k paths.
#
# Optional switch:
# go right to P, then continue right to the right edge.
#
# Main route:
# go down, then pass through a 2-way diamond.
if (M >> k) & 1:
pr, pc = r, c + 1
G[pr][pc] = 'P'
# unique suffix after pressing P
for cc in range(pc + 1, N):
if G[pr][cc] != 'P':
G[pr][cc] = '.'
for rr in range(pr, N):
if G[rr][N - 1] != 'P':
G[rr][N - 1] = '.'
# binary doubling gadget
# continue to C = (r+1, c), then 2 paths to next state
cells = [
(r + 1, c),
(r + 2, c),
(r + 1, c + 1),
(r + 2, c + 1),
]
for rr, cc in cells:
if G[rr][cc] != 'P':
G[rr][cc] = '.'
r, c = r + 2, c + 1
G[r][c] = '.'
G[N - 1][N - 1] = '.'
return G
def fallback_grid():
# Always valid format, but gives 0 valid paths.
G = [['#'] * N for _ in range(N)]
for c in range(N):
G[0][c] = '.'
for r in range(N):
G[r][N - 1] = '.'
return G
def solve():
M = int(sys.stdin.readline())
G = build_binary(M)
if G is None:
G = fallback_grid()
print(N)
for row in G:
print(''.join(row))
if __name__ == "__main__":
solve()