trang chủ / bài tập / crazydiam

Sắp xếp bằng hoán đổi xa

Đề bài

Mô tả

Cho một hoán vị p của các số nguyên từ 1 đến n, trong đó n là số chẵn.

Nhiệm vụ của bạn là sắp xếp hoán vị này theo thứ tự tăng dần. Để làm điều đó, bạn được thực hiện không quá 5·n thao tác, mỗi thao tác có dạng:

  • Chọn hai chỉ số ij thoả mãn 2·|ij|n, rồi hoán đổi pipj.

Bạn không cần cực tiểu hoá số thao tác, chỉ cần dùng không quá 5·n thao tác. Có thể chứng minh rằng với mọi hoán vị đầu vào luôn tồn tại một cách làm như vậy.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n (2n3·105, n chẵn) là độ dài hoán vị.
  • Dòng thứ hai chứa n số nguyên đôi một khác nhau p1,p2,,pn (1pin).

Dữ liệu ra

  • Dòng đầu ghi số nguyên m (0m5·n) là số thao tác bạn thực hiện.
  • m dòng tiếp theo, dòng thứ k ghi hai số nguyên ak,bk (1ak,bkn, 2·|akbk|n) là hai chỉ số được hoán đổi ở thao tác thứ k.

Sau khi thực hiện lần lượt tất cả các thao tác, mảng phải trở thành 1,2,,n. Nếu có nhiều đáp án, in ra đáp án bất kỳ.

Ràng buộc

  • 2n3·105, n chẵn
  • p là một hoán vị của 1,2,,n
  • 0m5·n

Ví dụ

Input Output Giải thích
2
2 1
1
1 2
n=2 nên điều kiện là ij1. Hoán đổi hai vị trí 12 là xong.
4
3 4 1 2
2
1 3
2 4
Điều kiện là ij2. Sau thao tác (1,3) mảng thành 1 4 3 2, sau thao tác (2,4) mảng thành 1 2 3 4.
6
2 5 3 1 4 6
9
1 4
2 6
1 4
1 6
2 6
1 4
1 4
1 5
1 4
Điều kiện là ij3. Đáp án không cần tối ưu: chỉ cần hợp lệ và không quá 30 thao tác. Ở đây 930 nên được chấp nhận, dù tồn tại lời giải chỉ dùng 3 thao tác.

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.400 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.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0