Valera và phép hoán đổi

Đề bài

Mô tả

Cho một hoán vị p độ dài n, tức là dãy gồm n số nguyên phân biệt p1,p2,,pn với 1pin. Hoán vị được gọi là đồng nhất nếu pi=i với mọi i.

Một phép hoán đổi (i,j) là thao tác đổi chỗ hai phần tử pipj. Đặt f(p) là số phép hoán đổi tối thiểu cần thực hiện để biến hoán vị p thành hoán vị đồng nhất.

Cho hoán vị p và số nguyên m. Hãy tìm cách biến p thành một hoán vị q nào đó sao cho f(q)=m, sử dụng số phép hoán đổi ít nhất có thể. Nếu có nhiều dãy hoán đổi có cùng độ dài nhỏ nhất, hãy in ra dãy có thứ tự từ điển nhỏ nhất (so sánh dãy số nguyên x1,x2,,x2k mà bạn in ra).

Dữ liệu vào

  • Dòng thứ nhất chứa số nguyên n — độ dài của hoán vị p.
  • Dòng thứ hai chứa n số nguyên phân biệt p1,p2,,pn — hoán vị ban đầu.
  • Dòng thứ ba chứa số nguyên m.

Dữ liệu ra

  • Dòng thứ nhất in số nguyên k — số phép hoán đổi nhỏ nhất.
  • Dòng thứ hai in 2k số nguyên x1,x2,,x2k, mô tả dãy hoán đổi: bạn lần lượt thực hiện các phép hoán đổi (x1,x2),(x3,x4),,(x2k1,x2k). Nếu có nhiều dãy thoả mãn, in dãy có thứ tự từ điển nhỏ nhất.

Ràng buộc

  • 1n3000
  • 1pin và các pi phân biệt
  • 0m<n

Ví dụ

Input Output Giải thích
5
1 2 3 4 5
2
2
1 2 1 3
p ban đầu đã là đồng nhất nên f(p)=0. Cần đạt f(q)=2, do đó phải thực hiện ít nhất 2 phép hoán đổi. Một cách hợp lệ là (1,2) rồi (1,3), biến p thành q=(3,1,2,4,5) với f(q)=2.
5
2 1 4 5 3
2
1
1 2
f(p)=3 (cần 3 phép hoán đổi để đưa về đồng nhất). Sau khi đổi (1,2), ta được q=(1,2,4,5,3) với f(q)=2.

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0