trang chủ / đề bài / unshufdeck

Sắp xếp lại bộ bài

Đề bài

Mô tả

Cho một bộ bài gồm n lá đánh số từ 1 đến 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 2≤k≤n và chia bộ bài thành k phần liên tiếp khác rỗng D1,D2,…,Dk (D1 gồm |D1| lá đầu tiên, D2 gồm |D2| lá tiếp theo, và cứ thế). Sau đó đảo ngược thứ tự các phần, bộ bài trở thành Dk,Dk−1,…,D2,D1. Thứ tự các lá bên trong mỗi phần được giữ nguyên.

Ví dụ:

  • Bộ bài [3,6,2,1,4,5,7], chọn k=4 với D1=[3,6], D2=[2,1,4], D3=[5], D4=[7], bộ bài trở thành [7,5,2,1,4,3,6].
  • Bộ bài [3,1,2], chọn k=3 với D1=[3], D2=[1], D3=[2], bộ bài trở thành [2,1,3].
  • Bộ bài [5,1,2,4,3,6], chọn k=2 với D1=[5,1], D2=[2,4,3,6], bộ bài trở thành [2,4,3,6,5,1].

Hãy đưa bộ bài về trạng thái đã sắp xếp (lá thứ nhất là 1, lá thứ hai là 2, ...) với không quá n 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 n, số lá bài.
  • Dòng thứ hai chứa n số nguyên c1,c2,…,cn, các lá bài theo thứ tự từ trên xuống (c1 là lá đầu tiên).

Dữ liệu ra

  • Dòng đầu in số thao tác q (0≤q≤n).
  • Mỗi dòng trong q dòng tiếp theo mô tả một thao tác: số k, theo sau là kích thước các phần |D1|,|D2|,…,|Dk|. Phải thỏa mãn 2≤k≤n, |Di|≥1 và |D1|+|D2|+⋯+|Dk|=n.

Nếu có nhiều cách, in ra cách bất kỳ.

Ràng buộc

  • 1≤n≤52
  • c1,c2,…,cn là một hoán vị của 1,2,…,n

Ví dụ

Input Output Giải thích
4
3 1 2 4
2
3 1 2 1
2 1 3
Chia [(3) (1 2) (4)] được [4,1,2,3]; sau đó chia [(4) (1 2 3)] được [1,2,3,4].
6
6 5 4 3 2 1
1
6 1 1 1 1 1 1
Tách thành 6 phần một lá rồi đảo thứ tự, được ngay [1,2,3,4,5,6].
1
1
0 Bộ bài đã sắp xếp, không cần thao tác nào.

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