Sắp xếp may mắn
Đề bài
Mô tả
Một số nguyên dương được gọi là số may mắn nếu biểu diễn thập phân của nó chỉ gồm các chữ số và . Ví dụ , , là số may mắn, còn , , thì không.
Cho dãy gồm số nguyên dương. Bạn muốn sắp xếp dãy này theo thứ tự không giảm, nhưng chỉ được phép dùng một loại thao tác:
Chọn hai vị trí phân biệt và rồi hoán đổi với , với điều kiện ít nhất một trong hai giá trị , tại thời điểm hoán đổi là số may mắn.
Hãy tìm một dãy thao tác bất kỳ gồm không quá lần hoán đổi để dãy trở thành không giảm, hoặc cho biết điều đó là không thể.
Dữ liệu vào
- Dòng đầu chứa số nguyên — số phần tử của dãy.
- Dòng thứ hai chứa số nguyên dương .
Dữ liệu ra
Nếu không thể sắp xếp dãy, in ra một số duy nhất .
Ngược lại, dòng đầu in số nguyên () là số lần hoán đổi. Trên dòng tiếp theo, mỗi dòng in hai số nguyên phân biệt là chỉ số của hai phần tử cần hoán đổi (các phần tử được đánh số từ ).
Không cần cực tiểu hoá . Nếu có nhiều đáp án, in ra đáp án bất kỳ.
Ràng buộc
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 3 4 2 1 |
1 1 3 |
Hoán đổi (số may mắn) với , dãy trở thành . |
| 2 4 7 |
0 | Dãy đã không giảm sẵn nên không cần thao tác nào. |
| 2 2 1 |
-1 | Dãy chưa được sắp xếp mà không có phần tử nào là số may mắn, nên mọi thao tác đều bị cấm. |
| 7 77 66 55 44 33 22 11 |
7 1 7 7 2 2 6 6 7 7 3 3 5 5 7 |
Số may mắn được dùng làm "ô trống": mọi lần hoán đổi đều có một đầu đang giữ giá trị nên đều hợp lệ. Dãy cuối cùng là , dùng lần hoán đổi (không quá ). |
Bình luận