結果

問題 No.3721 Absurd Basic Constructive
コンテスト
ユーザー takeharak15
提出日時 2026-10-02 07:58:54
言語 PyPy3
(7.3.23 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 137 ms / 2,000 ms
+ 23µs
コード長 944 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 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
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

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)
0