結果
| 問題 | No.3732 Labyrinth Maker |
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2026-09-03 04:33:04 |
| 言語 | Python3 (3.14.7 + numpy 2.5.2 + scipy 1.18.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 1,405 ms / 2,000 ms |
| + 756µs | |
| コード長 | 1,632 bytes |
| 記録 | |
| コンパイル時間 | 59 ms |
| コンパイル使用メモリ | 15,104 KB |
| 実行使用メモリ | 186,976 KB |
| 最終ジャッジ日時 | 2026-09-19 13:00:49 |
| 合計ジャッジ時間 | 80,152 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 59 |
ソースコード
import sys
it = iter(map(int, sys.stdin.buffer.read().split()))
out = []
for _ in range(next(it)):
n = next(it)
values = [next(it) % n for _ in range(n * n)]
if sum(values) % n:
out.append("-1")
continue
size, order = n * n, []
if n % 2 == 0:
order.extend(range(n))
for r in range(1, n):
order.extend(range(r * n + n - 1, r * n, -1) if r % 2 else range(r * n + 1, r * n + n))
order.extend(range(size - n, 0, -n))
else:
order.extend(range(n))
for c in range(n - 1, 1, -1):
order.extend(range((n - 1) * n + c, c, -n) if (n - 1 - c) % 2 else range(n + c, size + c, n))
for r in range(n - 1, 0, -1):
order.extend((r * n, r * n + 1) if (n - 1 - r) % 2 else (r * n + 1, r * n))
count, prefix = [0] * n, 0
for index, cell in enumerate(order):
if not (n % 2 and index == 1):
count[prefix] += 1
prefix = (prefix + values[cell]) % n
residue, cuts, prefix = max(range(n), key=count.__getitem__), [], 0
for index, cell in enumerate(order):
if not (n % 2 and index == 1) and prefix == residue:
cuts.append(index)
if len(cuts) == n:
break
prefix = (prefix + values[cell]) % n
answer = [0] * size
for label in range(n):
left = cuts[label]
right = cuts[(label + 1) % n] + (size if label == n - 1 else 0)
for index in range(left, right):
answer[order[index % size]] = label + 1
out.extend(" ".join(map(str, answer[r * n:(r + 1) * n])) for r in range(n))
print("\n".join(out))