結果
問題 |
No.217 魔方陣を作ろう
|
ユーザー |
![]() |
提出日時 | 2020-03-04 16:57:31 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 527 ms / 5,000 ms |
コード長 | 1,650 bytes |
コンパイル時間 | 161 ms |
コンパイル使用メモリ | 12,800 KB |
実行使用メモリ | 44,376 KB |
最終ジャッジ日時 | 2024-10-14 00:20:15 |
合計ジャッジ時間 | 10,926 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 18 |
ソースコード
#!/usr/bin/env python3# %%import sysread = sys.stdin.buffer.readreadline = sys.stdin.buffer.readlinereadlines = sys.stdin.buffer.readlines# %%import numpy as npN = int(read())# %%def f(N):if N % 4 == 0:return f0(N)elif N % 4 == 2:return f2(N)else:return f13(N)def f13(N):A = np.zeros((N, N), np.int32)x = 0y = N // 2for i in range(1, N * N + 1):if A[x][y]:x += 2y -= 1x %= Ny %= NA[x, y] = ix -= 1y += 1x %= Ny %= Nreturn Adef f0(N):A = np.arange(N * N).reshape(N, N)A[1::4, 0::4] *= -1A[1::4, 3::4] *= -1A[2::4, 0::4] *= -1A[2::4, 3::4] *= -1A[0::4, 1::4] *= -1A[0::4, 2::4] *= -1A[3::4, 1::4] *= -1A[3::4, 2::4] *= - 1A[A < 0] += N * N - 1A += 1return Adef f2(N):A = f(N // 2)A = np.repeat(A, 2, axis=0).repeat(2, axis=1)A = (A - 1) * 4n = N // 4# L-typeA[:2 * n + 2:2, ::2] += 4A[:2 * n + 2:2, 1::2] += 1A[1:2 * n + 2:2, ::2] += 2A[1: 2 * n + 2:2, 1::2] += 3# U-typeA[2 * n + 2, ::2] += 1A[2 * n + 2, 1::2] += 4A[2 * n + 3, ::2] += 2A[2 * n + 3, 1::2] += 3# X-typeA[2 * n + 4::2, ::2] += 1A[2 * n + 4::2, 1::2] += 4A[2 * n + 5::2, ::2] += 3A[2 * n + 5::2, 1::2] += 2# modify centerA[2 * n, 2 * n] -= 3A[2 * n, 2 * n + 1] += 3A[2 * n + 2, 2 * n] += 3A[2 * n + 2, 2 * n + 1] -= 3return A# %%A = f(N)print('\n'.join(' '.join(row) for row in A.astype(str)))