結果

問題 No.283 スライドパズルと魔方陣
ユーザー lam6er
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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