結果
問題 |
No.283 スライドパズルと魔方陣
|
ユーザー |
![]() |
提出日時 | 2025-04-09 21:06:12 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,262 bytes |
コンパイル時間 | 284 ms |
コンパイル使用メモリ | 82,564 KB |
実行使用メモリ | 63,132 KB |
最終ジャッジ日時 | 2025-04-09 21:08:15 |
合計ジャッジ時間 | 6,494 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 14 WA * 25 |
ソースコード
import sys def generate_magic_square(n): if n % 2 == 1: magic = [[0] * n for _ in range(n)] i, j = 0, n // 2 for num in range(1, n * n + 1): magic[i][j] = num ni, nj = (i - 1) % n, (j + 1) % n if magic[ni][nj] != 0: i = (i + 1) % n else: i, j = ni, nj return magic elif n % 4 == 0: magic = [[0] * n for _ in range(n)] num = 1 for i in range(n): for j in range(n): if (i % 4 == j % 4) or (i % 4 + j % 4 == 3): magic[i][j] = n * n + 1 - num else: magic[i][j] = num num += 1 return magic else: m = n // 2 a = generate_magic_square(m) magic = [[0] * n for _ in range(n)] for i in range(m): for j in range(m): aij = a[i][j] magic[i][j] = aij magic[i + m][j] = aij + 3 * m * m magic[i][j + m] = aij + 2 * m * m magic[i + m][j + m] = aij + m * m k = (m - 1) // 2 for i in range(m): for j in range(k): magic[i][j], magic[i + m][j] = magic[i + m][j], magic[i][j] for i in range(m): for j in range(n - k + 1, n): magic[i][j], magic[i + m][j] = magic[i + m][j], magic[i][j] return magic def main(): N = int(sys.stdin.readline()) grid = [] for _ in range(N): grid.append(list(map(int, sys.stdin.readline().split()))) if N == 2: print("impossible") return magic = generate_magic_square(N) if not magic: print("impossible") return target = N * N output = [] found = False for row in magic: new_row = [] for num in row: if num == target: new_row.append(target) found = True else: new_row.append(num) output.append(new_row) if not found: print("impossible") return print("possible") for row in output: print(' '.join(map(str, row))) if __name__ == "__main__": main()