結果
| 問題 |
No.228 ゆきこちゃんの 15 パズル
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-15 23:41:42 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,791 bytes |
| コンパイル時間 | 181 ms |
| コンパイル使用メモリ | 81,892 KB |
| 実行使用メモリ | 53,804 KB |
| 最終ジャッジ日時 | 2025-04-15 23:44:01 |
| 合計ジャッジ時間 | 1,685 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 16 WA * 1 |
ソースコード
def main():
import sys
input = sys.stdin.read().split()
grid = [list(map(int, input[i*4:(i+1)*4])) for i in range(4)]
# Precompute the initial positions (0-based)
initial_pos = {}
for i in range(4):
for j in range(4):
num = i * 4 + j + 1
if num == 16:
initial_pos[0] = (i, j)
else:
initial_pos[num] = (i, j)
# Check Manhattan distance for each number
possible = True
for i in range(4):
for j in range(4):
num = grid[i][j]
if num == 0:
continue
initial_i, initial_j = initial_pos[num]
dx = abs(i - initial_i)
dy = abs(j - initial_j)
if dx + dy > 1:
possible = False
break
if not possible:
break
if not possible:
print("No")
return
# Check standard 15-puzzle solvability
# Compute inversion count (excluding 0)
flat = []
zero_row = 0
for i in range(4):
for j in range(4):
num = grid[i][j]
if num == 0:
zero_row = i
else:
flat.append(num)
inv_count = 0
for i in range(len(flat)):
for j in range(i + 1, len(flat)):
if flat[i] > flat[j]:
inv_count += 1
# For standard 15 puzzle, solvable if (inv_count + zero_row_from_bottom) is even
# Here, zero_row is 0-based (0 is top row, 3 is bottom row)
# So zero_row_from_bottom = 3 - zero_row
zero_row_from_bottom = 3 - zero_row
if (inv_count + zero_row_from_bottom) % 2 != 0:
possible = False
print("Yes" if possible else "No")
if __name__ == "__main__":
main()
lam6er