結果
| 問題 | No.3732 Labyrinth Maker |
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2026-07-10 03:56:36 |
| 言語 | Python3 (3.14.7 + numpy 2.5.2 + scipy 1.18.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 1,280 ms / 2,000 ms |
| + 950µs | |
| コード長 | 1,331 bytes |
| 記録 | |
| コンパイル時間 | 58 ms |
| コンパイル使用メモリ | 15,232 KB |
| 実行使用メモリ | 120,960 KB |
| 最終ジャッジ日時 | 2026-09-19 12:34:21 |
| 合計ジャッジ時間 | 77,113 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 59 |
ソースコード
import sys
input=sys.stdin.buffer.readline
T=int(input())
for _case in range(T):
N=int(input())
A=[]; sm=0
for _ in range(N):
r=[int(x)%N for x in input().split()]
A+=r; sm=(sm+sum(r))%N
if sm:
print(-1)
continue
M=N*N
o=[]
if N%2==0:
o+=range(N)
for i in range(1,N):
if i&1: o+=range(i*N+N-1,i*N,-1)
else: o+=range(i*N+1,i*N+N)
o+=range(M-N,0,-N)
else:
o+=range(N)
for j in range(N-1,1,-1):
if (N-1-j)&1: o+=range((N-1)*N+j,j,-N)
else: o+=range(N+j,M+j,N)
for i in range(N-1,0,-1):
if (N-1-i)&1: o+=[i*N,i*N+1]
else: o+=[i*N+1,i*N]
cnt=[0]*N
s=0
for t,v in enumerate(o):
if not (N&1 and t==1):
cnt[s]+=1
s=(s+A[v])%N
r=max(range(N),key=cnt.__getitem__)
cut=[]
s=0
for t,v in enumerate(o):
if not (N&1 and t==1) and s==r:
cut.append(t)
if len(cut)==N:
break
s=(s+A[v])%N
ans=[0]*M
for k in range(N):
l=cut[k]
rr=cut[(k+1)%N]+(M if k==N-1 else 0)
for t in range(l,rr):
ans[o[t%M]]=k+1
w=sys.stdout.write
for i in range(N):
w(" ".join(map(str,ans[i*N:(i+1)*N]))+"\n")