結果
| 問題 | No.3721 Absurd Basic Constructive |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-10-02 07:58:54 |
| 言語 | PyPy3 (7.3.23 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 137 ms / 2,000 ms |
| + 23µs | |
| コード長 | 944 bytes |
| 記録 | |
| コンパイル時間 | 65 ms |
| コンパイル使用メモリ | 81,904 KB |
| 実行使用メモリ | 166,044 KB |
| 最終ジャッジ日時 | 2026-10-02 07:59:13 |
| 合計ジャッジ時間 | 10,238 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge4_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 47 |
ソースコード
N, K = map(int, input().split())
# [1, N^2] の大きい方から K 個をとってくる。
# これを B = {N^2 - K + 1, N^2 - K + 2, ..., N^2} とする。
# C = {1, 2, ..., N^2 - K} とする。
# 最初 K この要素を B から並べる。すなわち A[1][1] = N^2-K+1, A[1][2] = N^2-K+2, ..., A[1][K] = N^2
# こうすると、B を並べた位置は、(1, 1) と (i, j) を対角線とする長方形の中で A[i][j] が最大になる。
# また、その後 C のそうそを並べると、それ以降は (i, j) より大きいものが並んでいるので、最大ではなく、
if K == 0:
print(-1)
exit()
B = []
C = []
for i in range(1, N * N + 1):
if i > N * N - K:
B.append(i)
else:
C.append(i)
C.reverse()
A = [[0] * N for _ in range(N)]
for p in range(N * N):
i, j = divmod(p, N)
if p < K:
A[i][j] = B[p]
else:
A[i][j] = C[p - K]
for a in A:
print(*a)