結果
問題 |
No.283 スライドパズルと魔方陣
|
ユーザー |
![]() |
提出日時 | 2025-06-12 21:39:12 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,569 bytes |
コンパイル時間 | 355 ms |
コンパイル使用メモリ | 82,048 KB |
実行使用メモリ | 76,800 KB |
最終ジャッジ日時 | 2025-06-12 21:43:43 |
合計ジャッジ時間 | 6,905 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 10 WA * 29 |
ソースコード
def generate_magic_square(n): magic = [[0 for _ in range(n)] for _ in range(n)] if n % 2 == 1: 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, j = ni, nj else: i = (i + 1) % n elif n == 2: return None else: return None return magic def count_inversions(arr): inv_count = 0 for i in range(len(arr)): for j in range(i + 1, len(arr)): if arr[i] > arr[j]: inv_count += 1 return inv_count def main(): import sys input = sys.stdin.read().split() idx = 0 N = int(input[idx]) idx += 1 initial = [] for _ in range(N): row = list(map(int, input[idx:idx + N])) idx += N initial.append(row) if N == 2: print("impossible") return try: target = generate_magic_square(N) except: print("impossible") return if not target: print("impossible") return s = [] for row in initial: for num in row: if num != 0: s.append(num) s_sorted = sorted(s) target_list = [] for row in target: for num in row: if num != N * N: target_list.append(num) if s_sorted != sorted(target_list): print("impossible") return initial_list = [] for i in range(N): for j in range(N): if initial[i][j] != 0: initial_list.append(initial[i][j]) target_indices = {num: idx for idx, num in enumerate(target_list)} permutation = [] for num in initial_list: permutation.append(target_indices[num]) inv_count = count_inversions(permutation) blank_i, blank_j = -1, -1 for i in range(N): for j in range(N): if initial[i][j] == 0: blank_i, blank_j = i, j break if blank_i != -1: break blank_row_from_bottom = (N - 1 - blank_i) solvable = False if N % 2 == 1: if inv_count % 2 == 0: solvable = True else: if inv_count % 2 == 1 and blank_row_from_bottom % 2 == 0: solvable = True if solvable: print("possible") for row in target: print(' '.join(map(str, row))) else: print("impossible") if __name__ == '__main__': main()