Thứ Sáu, 12 tháng 8, 2016

NK05EOPR - Đổi chỗ

Bài toán

Cho một dãy số là một hoán vị của 12 số tự nhiên đầu tiên (từ 0 đến 11). Giả sử số 0 ở vị trí thứ i trong dãy số (vị trí được đánh số từ 0 đến 11, từ trái sang phải) thì bạn có thể đổi chỗ số 0 với số ở vị trí thứ j nếu thỏa mãn cả hai điều kiện sau:
  • | i – j | = dk , với k=1..3 và (d1,d2,d3,d4)=(1;3;6;12)
  • [i/dk+1]=[j/dk+1], với [] là hàm phần nguyên
Bạn hãy tìm số phép đổi chỗ ít nhất để có thể sắp xếp dãy số theo thứ tự tăng dần


Dữ liệu vào

Dòng đầu tiên là một số nguyên t cho biết số lượng test (t<=20)
Mỗi bộ test bao gồm một dòng là dãy bao gồm các số từ 0 đến 11, mỗi số ngăn cách bởi một khoảng trắng.
Biết rằng mỗi dãy số cho trước luôn luôn có thể sắp xếp tăng dần bằng phép đổi chỗ đã quy định

Kết qủa

Với mỗi bộ test, in ra số phép đổi chỗ ít nhất để sắp xếp dãy số đã cho theo thứ tự tăng dần

Ví dụ

Input
2
1 10 2 3 0 5 7 4 8 6 9 11
6 4 1 0 3 5 9 7 2 10 11 8

Output
8
9

Giới hạn

Thời gian chạy:18s
Giới hạn mã nguồn:50000B
Memory limit:1536MB

Giải thuật

- Thuật toán A*

Mã nguồn

- ideone.com
- github.com

Related Posts:

  • NK05DSRT - Sa mạc Bài toán Bờm vô tình bị lạc vào trong 1 ốc đảo có 1 bộ tộc thổ dân sinh sống trong 1 lần đi qua sa mạc. Bờm muốn thoát khỏi sa mạc để về nhà. Người thổ dân đã cho anh một bản đồ vùng sa mạc này. Sa mạc gồm N ốc đảo, M đ… Read More
  • NK05EOPR - Đổi chỗ Bài toán Cho một dãy số là một hoán vị của 12 số tự nhiên đầu tiên (từ 0 đến 11). Giả sử số 0 ở vị trí thứ i trong dãy số (vị trí được đánh số từ 0 đến 11, từ trái sang phải) thì bạn có thể đổi chỗ số 0 với số ở vị trí … Read More

0 nhận xét :