Sắp xếp lớp thể dục

Đề bài

Mô tả

Cho hai dãy số nguyên a1,a2,…,an và b1,b2,…,bn có cùng độ dài n. Đảm bảo a và b là cùng một đa tập (tức là b là một hoán vị của a, có thể chứa các giá trị trùng nhau).

Bạn cần biến dãy b thành dãy a bằng một dãy thao tác. Mỗi thao tác là chọn một vị trí p (1≤p≤n−1) rồi đổi chỗ hai phần tử kề nhau bp và bp+1.

Hãy in ra một dãy thao tác hợp lệ bất kỳ sao cho sau khi thực hiện theo thứ tự, b trùng với a. Số thao tác k phải thỏa 0≤k≤106 — không yêu cầu tối thiểu hóa k.

Dữ liệu vào

  • Dòng 1: số nguyên n.
  • Dòng 2: n số nguyên a1,a2,…,an.
  • Dòng 3: n số nguyên b1,b2,…,bn.

Dữ liệu ra

  • Dòng 1: số nguyên k — số thao tác.
  • k dòng tiếp theo: mỗi dòng gồm hai số nguyên p và p+1 mô tả thao tác đổi chỗ bp với bp+1 (theo thứ tự thực hiện).

Nếu có nhiều đáp án hợp lệ, in ra một đáp án bất kỳ.

Ràng buộc

  • 1≤n≤300
  • 1≤ai,bi≤109
  • a và b là cùng một đa tập.

Ví dụ

Input Output Giải thích
4
1 2 3 2
3 2 1 2
3
2 3
1 2
2 3
Bắt đầu b=[3,2,1,2]. Đổi chỗ vị trí (2,3): b=[3,1,2,2]. Đổi chỗ (1,2): b=[1,3,2,2]. Đổi chỗ (2,3): b=[1,2,3,2]=a.
2
1 100500
1 100500
0 Hai dãy đã trùng nhau, 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