結果
| 問題 | No.3732 Labyrinth Maker |
| コンテスト | |
| ユーザー |
kidodesu
|
| 提出日時 | 2026-09-19 14:39:18 |
| 言語 | PyPy3 (7.3.23 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 559 ms / 2,000 ms |
| + 70µs | |
| コード長 | 1,219 bytes |
| 記録 | |
| コンパイル時間 | 198 ms |
| コンパイル使用メモリ | 81,904 KB |
| 実行使用メモリ | 232,776 KB |
| 最終ジャッジ日時 | 2026-09-19 14:40:18 |
| 合計ジャッジ時間 | 44,802 ms |
|
ジャッジサーバーID (参考情報) |
judge5_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 59 |
ソースコード
from atcoder.dsu import DSU
def main():
n = int(input())
A = [list(map(int, input().split())) for _ in range(n)]
a = 0
for aa in A:
a += sum(aa)
if a % n: return [[]]
uf = DSU(n*n)
X = [0] * n
for y in range(n):
for x in range(n):
if X[x]:
X[x] += A[y][x]
uf.merge((y-1)*n+x, y*n+x)
else:
X[x] = A[y][x]
if y == n-1: break
D = {}
t = 0
D[t] = 0
for x in range(n):
t += X[x]
t %= n
if t in D:
l = D[t]
r = x+1
break
D[t] = x+1
for u in range(l, r-1):
uf.merge(y*n+u, y*n+u+1)
X[u] = 0
X[r-1] = 0
for u in range(n-1):
uf.merge(n*n+u-n, n*n+u-n+1)
Ans = [[-1] * n for _ in range(n)]
i = 1
for g in uf.groups():
s = 0
for u in g:
Ans[u//n][u%n] = i
s += A[u//n][u%n]
s %= n
i += 1
return Ans
for _ in range(int(input())):
Ans = main()
if not Ans[0]:
print(-1)
else:
for ans in Ans:
print(*ans)
kidodesu