trang chủ / đề bài / csp_tst_23_d

Hoán vị trộn

Đề bài

Mô tả

Cho hai dãy số nguyên dương độ dài n: a=(a1,a2,…,an) và b=(b1,b2,…,bn). Biết rằng các phần tử của hai dãy số là các số nguyên dương, không nhất thiết phân biệt, được lấy từ tập {1,2,…,n}.

Đối với hai dãy đã cho, ta có thể thực hiện phép biến đổi sau đây: chọn hai chỉ số i và j với 1≤i≤j≤n, sau đó hoán đổi hai dãy con ai,ai+1,…,aj và bi,bi+1,…,bj của hai dãy cho nhau, ta thu được hai dãy mới:

(a1,a2,…,ai−1,bi,bi+1,…,bj,aj+1,aj+2,…,an)

và:

(b1,b2,…,bi−1,ai,ai+1,…,aj,bj+1,bj+2,…,bn).

Như vậy, phép biến đổi nêu trên được xác định bởi cặp hai chỉ số (i,j).

Nếu sau khi thực hiện phép biến đổi như vậy có ít nhất một trong hai dãy thu được là hoán vị của {1,2,…,n}, thì ta thu được một hoán vị trộn.

Yêu cầu: Hãy xác định xem có thể thu được hoán vị trộn bởi bao nhiêu cách. Hai cách là khác nhau nếu cặp chỉ số (i,j) khác nhau (kể cả khi các dãy thu được giống nhau). Mỗi cách chỉ được tính một lần, kể cả khi cả hai dãy thu được đều là hoán vị.

Dữ liệu vào

Dữ liệu gồm nhiều test có cấu trúc như sau:

  • Dòng đầu tiên là số t (1≤t≤5) là số test. Sau đó là các test, mỗi test gồm:
    • Dòng thứ nhất chứa số nguyên n (1≤n≤2·105).
    • Dòng thứ hai chứa dãy số a1,a2,…,an (1≤ai≤n).
    • Dòng thứ ba chứa dãy số b1,b2,…,bn (1≤bi≤n).

Dữ liệu ra

Gồm t dòng, mỗi dòng một số nguyên, tương ứng là số cách khác nhau có thể thu được hoán vị trộn nhờ thực hiện phép biến đổi đã nêu đối với hai dãy tương ứng trong dữ liệu vào.

Ràng buộc

  • 1≤t≤5.
  • 1≤n≤2·105.
  • 1≤ai,bi≤n.

Subtasks

  • Subtask 1 (30% số test, ứng với 30% số điểm): n≤100.
  • Subtask 2 (30% số test khác, ứng với 30% số điểm): n≤5000.
  • Subtask 3 (40% số test còn lại, ứng với 40% số điểm): n≤2·105.

Bài được chấm theo từng test, mỗi test có cùng số điểm.

Ví dụ

Input Output Giải thích
2
6
3 2 1 4 4 5
2 3 3 4 6 5
2
1 2
1 2
8
3
Test 1: các cặp (1,3),(1,4),(3,3),(3,4) làm dãy thứ hai thành hoán vị (chẳng hạn (1,3) cho (3,2,1,4,6,5)); các cặp (4,5),(4,6),(5,5),(5,6) làm dãy thứ nhất thành (3,2,1,4,6,5). Test 2: cả 3 cặp (1,1),(1,2),(2,2) đều cho hai dãy (1,2), mỗi cặp tính một lần.
3
1
1
1
3
1 1 1
1 1 1
4
2 1 3 3
2 4 1 3
1
0
6
Test 1: chỉ có cặp (1,1). Test 2: không cặp nào cho hoán vị. Test 3: các cặp (1,1),(4,4) giữ dãy thứ hai là (2,4,1,3); các cặp (1,3),(1,4),(2,3),(2,4) làm dãy thứ nhất thành (2,4,1,3).

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