結果
問題 |
No.228 ゆきこちゃんの 15 パズル
|
ユーザー |
![]() |
提出日時 | 2025-06-12 21:17:21 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,709 bytes |
コンパイル時間 | 160 ms |
コンパイル使用メモリ | 81,704 KB |
実行使用メモリ | 54,432 KB |
最終ジャッジ日時 | 2025-06-12 21:17:45 |
合計ジャッジ時間 | 1,540 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 11 WA * 6 |
ソースコード
# Read the target grid grid = [] for _ in range(4): row = list(map(int, input().split())) grid.append(row) # Create a dictionary to store the position of each number in the target grid target_pos = {} for i in range(4): for j in range(4): v = grid[i][j] target_pos[v] = (i + 1, j + 1) # 1-based coordinates # Check if all numbers from 1 to 15 are present (input is valid) valid = True for v in range(1, 16): if v not in target_pos: valid = False break if 0 not in target_pos: valid = False if not valid: print("No") exit() # Calculate inversion count of the target configuration (excluding 0) flattened = [] for i in range(4): for j in range(4): v = grid[i][j] if v != 0: flattened.append(v) inv_count = 0 n = len(flattened) for i in range(n): for j in range(i + 1, n): if flattened[i] > flattened[j]: inv_count += 1 # Calculate Manhattan distance of the empty tile from its initial position (4,4) zero_r, zero_c = target_pos[0] manhattan_zero = abs(4 - zero_r) + abs(4 - zero_c) # Check standard solvability condition normal_condition = (inv_count + manhattan_zero) % 2 == 0 # Check each tile's Manhattan distance from its initial position possible = True for v in range(1, 16): # Initial position calculation (1-based) initial_row = (v - 1) // 4 + 1 initial_col = (v - 1) % 4 + 1 # Target position target_r, target_c = target_pos[v] dx = abs(target_r - initial_row) dy = abs(target_c - initial_col) if dx + dy > 1: possible = False break # Determine the result if normal_condition and possible: print("Yes") else: print("No")