Vấn đề hoán đổi tàu kéo dài
Phần 1: Vấn đề hoán đổi tàu thường
Trong CCC năm 1996 (Cuộc thi điện toán Canada), vấn đề ở Giai đoạn 2 đầu tiên là Vấn đề Hoán đổi Tàu hỏa. Bạn có thể truy cập liên kết ở đây . Về cơ bản, bạn có một loạt các chuyến tàu được đánh số và bạn muốn tìm hiểu xem bạn cần bao nhiêu giao dịch hoán đổi để có được chúng theo thứ tự, và mỗi hoạt động hoán đổi tàu cho phép bạn hoán đổi hai chuyến tàu liền kề. Vì các toa tàu có thể chạy một trong hai cách, không ai quan tâm đến thực tế là các toa tàu phải đối mặt với cách khác khi hoán đổi. Điều này là khá dễ dàng; tất cả những gì bạn cần làm là:
Tìm số bước để sắp xếp bong bóng; đó là thuật toán sắp xếp hiệu quả nhất khi bạn chỉ có thể thực hiện hoán đổi phần tử liền kề
Vì vậy, tôi đã làm một cái khó hơn.
Phần 2: Thử thách này hoạt động như thế nào
Về cơ bản, bây giờ bạn có thể trao đổi nhiều hơn là chỉ các tàu liền kề. Với một nền tảng xoay dài hơn, bạn có thể trao đổi vị trí của nhiều chuyến tàu. Ví dụ, với một nền tảng xoay có chiều dài 4, bạn có thể trao đổi cả cặp bên trong và bên ngoài cùng một lúc, do đó 1 2 3 4
trở thành 4 3 2 1
. Dưới đây là một số ví dụ cho các kích thước nền tảng xoay khác nhau:
Length 2:
1 2 3 4 5
---
1 3 2 4 5
Length 3:
1 2 3 4 5
-----
1 4 3 2 5
Length 4:
1 2 3 4 5
-------
4 3 2 1 5
Về cơ bản, bạn chỉ đang đảo ngược một danh sách con của toàn bộ chuyến tàu. Để làm rõ, trong mỗi lần di chuyển, bạn chỉ có thể trao đổi chính xác N
các chuyến tàu.
Phần 3: Thông số kỹ thuật
Đầu vào
Đầu vào của bạn phải có hai điều: chiều dài của nền tảng quay và thứ tự của toa xe lửa. Bạn cũng có thể yêu cầu số lượng toa tàu nếu bạn muốn. Thứ tự của các toa tàu được đưa ra bởi một danh sách các số theo thứ tự (mỗi số đại diện cho một toa tàu), vì vậy bạn có thể đọc đầu vào dưới dạng các số nguyên được phân tách bằng dấu cách, các số nguyên được phân tách bằng dòng mới, một mảng, v.v.
Đầu ra
Bạn phải xuất số lượng giao dịch hoán đổi tối thiểu (tối thiểu) cần thiết để có được tất cả các toa xe theo thứ tự 1 2 3 ... N
. Nếu không có giải pháp, sản lượng -1
, No solution
hoặc một số thông điệp nhất quán khác. Bạn không thể xuất ra stderr.
Chấm điểm
Đây là một thử thách chơi gôn , vì vậy việc ghi điểm được tính bằng byte. Giải pháp có số byte thấp nhất kể từ ngày 1 tháng 9 năm 2016 sẽ là giải pháp được chấp nhận.
Ví dụ
Vấn đề 1 Đầu vào
4
2
1 3 2 4
Đầu ra
1
Giải thích
Điều này khá tầm thường; với một nền tảng xoay có chiều dài 2, nó giống như vấn đề hoán đổi tàu thông thường. Trao đổi 2
và 3
.
Vấn đề 2 Đầu vào
4
3
1 3 2 4
Đầu ra
No solution (or an equivalent consistent message).
Vấn đề 3 Đầu vào
9
3
1 4 5 6 3 8 7 2 9
Đầu ra
4
Giải trình
1 4 5 6 3 8 7 2 9
-----
1 4 5 6 3 2 7 8 9
-----
1 4 5 2 3 6 7 8 9
-----
1 4 3 2 5 6 7 8 9
-----
1 2 3 4 5 6 7 8 9
Chúc may mắn!
EDIT 1 : Làm cho định dạng đầu vào linh hoạt hơn. Cảm ơn @Mego!
EDIT 2 : Làm rõ rằng một nền tảng xoay có chiều dài 4 hoán đổi cả cặp bên trong và bên ngoài. Cảm ơn @TimmyD!
EDIT 3 : Làm rõ rằng bạn phải thực hiện hoán vị độ dài N
chính xác, không nhiều nhất. Cảm ơn @Zgarb!