trang chủ / đề bài / voi15_tsort

Cây hoán vị

Đề bài

Mô tả

Mùa Giáng Sinh năm nay ấm áp, đôi bạn Đông và Bắc rủ nhau ở nhà cùng nghiên cứu một thuật toán sắp xếp tổ hợp có cấu trúc đặc biệt. Ban đầu Đông chuẩn bị một hoán vị π=(π1,π2,…,πn) của n số nguyên dương 1,2,…,n rồi đưa cho Bắc. Tiếp theo, Đông tìm hoán vị đi ngay sau hoán vị π trong thứ tự từ điển rồi đưa cho Bắc, và cứ tiếp tục như vậy. Nhắc lại là: Hoán vị ρ=(ρ1,ρ2,…,ρn) được gọi là đi trước hoán vị σ=(σ1,σ2,…,σn) theo thứ tự từ điển nếu như tồn tại một chỉ số i (1≤i≤n) sao cho:

  • nếu i=1 thì ρi<σi;
  • nếu 1<i≤n thì ρj=σj với j<i và ρi<σi.

Với mỗi hoán vị π nhận được từ Đông, Bắc tiến hành dựng cây nhị phân T(π) có cấu trúc như sau:

  • Nút gốc của T(π) được gán nhãn n là số lớn nhất của π;
  • Giả sử πleft và πright lần lượt là dãy con bên trái và bên phải của n trong π. Gọi a là số lớn nhất của dãy πleft và b là số lớn nhất của dãy πright. Khi đó nút gốc của T(π) sẽ có hai cây con: cây con trái T(πleft) với gốc được gán nhãn a và cây con phải T(πright) với gốc được gán nhãn b. Nếu dãy πleft là rỗng thì nút gốc của T(π) không có con trái. Nếu dãy πright là rỗng thì nút gốc của T(π) không có con phải;
  • Nếu dãy πleft là khác rỗng thì cây con T(πleft) gốc tại a được xây dựng một cách đệ qui đối với dãy con πleft giống như việc xây dựng cây T(π);
  • Nếu dãy πright là khác rỗng thì cây con T(πright) gốc tại b được xây dựng một cách đệ qui đối với dãy con πright giống như việc xây dựng cây T(π).

Ví dụ: Với π=(2,6,3,4,9,8,1,7,5) thì cây T(π) như sau: gốc 9 có con trái 6 và con phải 8; nút 6 có con trái 2 và con phải 4; nút 4 có con trái 3; nút 8 chỉ có con phải 7; nút 7 có con trái 1 và con phải 5.

Cây T(π) xây dựng theo qui tắc nêu trên được gọi là cây nhị phân tương ứng với hoán vị π.

Tiếp theo Bắc tiến hành liệt kê các nút của cây T(π) theo thứ tự sau và thu được một hoán vị mới gồm các nhãn của các nút được sắp xếp theo trình tự các nút được liệt kê. Nhắc lại là: Việc liệt kê các nút của cây T(π) theo thứ tự sau được định nghĩa một cách đệ qui như sau:

  • Nếu cây T(π) chỉ có một nút thì danh sách gồm một nút duy nhất đó là danh sách các nút của cây T(π) được liệt kê theo thứ tự sau;
  • Nếu cây T(π) có nhiều hơn một nút thì danh sách các nút của cây T(π) được liệt kê theo thứ tự sau là: đầu tiên là các nút của cây con trái của T(π) được liệt kê theo thứ tự sau, tiếp đến là các nút của cây con phải của T(π) được liệt kê theo thứ tự sau, cuối cùng là nút gốc.

Ví dụ: Với hoán vị trong ví dụ trên, hoán vị thu được bởi việc liệt kê các nút của cây nhị phân tương ứng với nó T(π) theo thứ tự sau là (2,3,4,6,1,5,7,8,9).

Đôi bạn xét tính chất TSort sau đây trên tập các hoán vị của các số nguyên dương từ 1 đến n: "Hoán vị π được nói là có tính chất TSort nếu việc liệt kê các nút của cây nhị phân tương ứng với nó T(π) theo thứ tự sau cho ta hoán vị đơn vị, nghĩa là hoán vị có dạng (1,2,…,n)". Đông và Bắc muốn khảo sát xem những hoán vị như vậy có phải là thường gặp hay không.

Yêu cầu: Cho π là một hoán vị của các số 1,2,…,n, hãy viết chương trình giúp đôi bạn xác định số lượng hoán vị trong số k hoán vị liên tiếp theo thứ tự từ điển bắt đầu từ π (kể cả π) thoả mãn tính chất TSort.

Dữ liệu vào

  • Dòng đầu gồm hai số nguyên dương n và k.
  • Dòng thứ hai gồm n số nguyên dương π1,π2,…,πn là các thành phần của hoán vị π.

Hai số liên tiếp trên cùng một dòng được ghi cách nhau bởi dấu cách.

Dữ liệu ra

In ra một số nguyên duy nhất là số lượng hoán vị trong số k hoán vị liên tiếp theo thứ tự từ điển bắt đầu từ π (kể cả π) thoả mãn tính chất TSort.

Ràng buộc

  • 1≤n≤1000; 1≤k≤106.
  • Dữ liệu đảm bảo tính từ π (kể cả π) có ít nhất k hoán vị theo thứ tự từ điển.

Subtasks

  • Subtask 1 (30% số điểm): n,k≤100.
  • Subtask 2 (30% số điểm): n,k≤103.
  • Subtask 3 (40% số điểm): n≤103, k≤106.

Mỗi subtask gồm nhiều test, mỗi test được chấm điểm riêng.

Ví dụ

Input Output Giải thích
4 6
1 3 4 2
4 Sáu hoán vị: (1,3,4,2), (1,4,2,3), (1,4,3,2), (2,1,3,4), (2,1,4,3), (2,3,1,4). Bốn hoán vị ở giữa có tính chất TSort; (1,3,4,2) thì không, vì thứ tự sau của nó là (1,3,2,4).
5 10
2 1 5 4 3
1 Chỉ (2,1,5,4,3) có tính chất TSort. Chín hoán vị sau (từ (2,3,1,4,5) đến (2,4,3,1,5)) đều có 2, rồi một số lớn hơn 2, rồi 1 theo đúng thứ tự đó, nên trong thứ tự sau số 2 đứng trước số 1.

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