Sắp xếp lại bộ bài
Đề bài
Mô tả
Cho một bộ bài gồm lá đánh số từ đến , xếp theo một thứ tự bất kỳ. Bạn cần sắp xếp bộ bài bằng cách lặp lại thao tác sau:
- Chọn và chia bộ bài thành phần liên tiếp khác rỗng ( gồm lá đầu tiên, gồm lá tiếp theo, và cứ thế). Sau đó đảo ngược thứ tự các phần, bộ bài trở thành . Thứ tự các lá bên trong mỗi phần được giữ nguyên.
Ví dụ:
- Bộ bài , chọn với , , , , bộ bài trở thành .
- Bộ bài , chọn với , , , bộ bài trở thành .
- Bộ bài , chọn với , , bộ bài trở thành .
Hãy đưa bộ bài về trạng thái đã sắp xếp (lá thứ nhất là , lá thứ hai là , ...) với không quá thao tác. Có thể chứng minh rằng điều này luôn làm được.
Dữ liệu vào
- Dòng đầu chứa số nguyên , số lá bài.
- Dòng thứ hai chứa số nguyên , các lá bài theo thứ tự từ trên xuống ( là lá đầu tiên).
Dữ liệu ra
- Dòng đầu in số thao tác ().
- Mỗi dòng trong dòng tiếp theo mô tả một thao tác: số , theo sau là kích thước các phần . Phải thỏa mãn , và .
Nếu có nhiều cách, in ra cách bất kỳ.
Ràng buộc
- là một hoán vị của
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 4 3 1 2 4 |
2 3 1 2 1 2 1 3 |
Chia được ; sau đó chia được . |
| 6 6 5 4 3 2 1 |
1 6 1 1 1 1 1 1 |
Tách thành phần một lá rồi đảo thứ tự, được ngay . |
| 1 1 |
0 | Bộ bài đã sắp xếp, không cần thao tác nào. |
Bình luận