trang chủ / đề bài / dn_tst_23_xephinh

Xếp hình

Đề bài

Mô tả

Xếp hình là một trong những trò kinh điển thời tuổi thơ dữ dội của chúng ta. Trò chơi gồm một bảng 3×3 chứa 8 miếng ghép và một ô trống. Người chơi cố gắng sắp xếp lại các miếng ghép thành một thứ tự định sẵn, bằng cách lặp lại việc di chuyển một trong các miếng ghép kề cạnh với ô trống vào ô trống (và dĩ nhiên ô trống sẽ chuyển sang vị trí của miếng ghép). Để đơn giản, các miếng ghép được đánh số từ 1 đến 8 và thứ tự định sẵn như sau: ô trống nằm ở góc trên bên trái, hàng trên cùng là ô trống, 1, 2; hàng giữa là 3, 4, 5; hàng dưới cùng là 6, 7, 8:

Cột 1 Cột 2 Cột 3
(trống) 1 2
3 4 5
6 7 8

Ở phiên bản khó của trò chơi, bạn cần tìm số bước di chuyển ít nhất để đưa trạng thái đã cho về trạng thái định sẵn. Hùng đã chơi trò này nhiều lần nhưng vẫn gặp vấn đề với phiên bản khó, và có vẻ bài tập này được thiết kế để dành riêng cho cậu.

Dữ liệu vào

  • Dòng đầu chứa số nguyên dương T là số lượng testcase;
  • T dòng tiếp theo, mỗi dòng chứa 9 số nguyên là một hoán vị của 0,1,2,…,8 mô tả một trạng thái bắt đầu. Các số trong hoán vị lần lượt là các số ghi trên các ô của bảng, theo thứ tự từ trái sang phải, từ trên xuống dưới. Số 0 đại diện cho ô trống.

Như vậy trạng thái định sẵn ứng với hoán vị 0 1 2 3 4 5 6 7 8.

Dữ liệu ra

Gồm T dòng, mỗi dòng ghi một số nguyên là số bước di chuyển ít nhất, hoặc −1 nếu không thể đưa trạng thái này về trạng thái định sẵn.

Ràng buộc

  • 1≤T≤106.

Subtasks

  • 30% số test với T=5 và kết quả không vượt quá 10;
  • 30% số test tiếp theo có kết quả không vượt quá 10;
  • 40% số test tiếp theo với ràng buộc gốc.

Trong hai subtask đầu, "kết quả không vượt quá 10" nghĩa là mọi trạng thái trong test đều đưa được về trạng thái định sẵn với không quá 10 bước (không có đáp án −1).

Ví dụ

Input Output Giải thích
4
0 1 2 3 4 5 6 7 8
3 1 2 0 4 5 6 7 8
1 2 3 4 5 6 7 8 0
2 3 0 4 1 5 8 6 7
0
1
22
-1
Trạng thái 1 đã là trạng thái định sẵn. Ở trạng thái 2, chỉ cần di chuyển miếng ghép 3 lên ô trống. Trạng thái 4 không thể đưa về trạng thái định sẵn.
5
1 0 2 3 4 5 6 7 8
1 2 5 3 4 0 6 7 8
3 1 2 6 4 5 0 7 8
1 4 2 3 0 5 6 7 8
3 1 2 4 7 5 6 8 0
1
3
2
2
4
Ví dụ thêm (thỏa mãn subtask 1). Ở trạng thái 2, lần lượt di chuyển các miếng ghép 5, 2, 1 vào ô trống. Ở trạng thái 5, lần lượt di chuyển các miếng ghép 8, 7, 4, 3.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0