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

Đổi chỗ các cột

Đề bài

Mô tả

Cho một bảng a kích thước 2×n (hai hàng, n cột), các ô chứa số nguyên trong đoạn [1,n].

Trong một bước, bạn chọn một cột j (1jn) và đổi chỗ hai giá trị a1,ja2,j trong cột đó. Mỗi cột được chọn nhiều nhất một lần.

Hãy tìm số bước ít nhất để cả hàng thứ nhất lẫn hàng thứ hai đều trở thành một hoán vị của 1,2,,n, hoặc cho biết điều đó là không thể.

Một hoán vị kích thước n là một dãy n số chứa mỗi số nguyên từ 1 đến n đúng một lần (thứ tự các phần tử không quan trọng).

Dữ liệu vào

  • Dòng đầu chứa số nguyên t: số bộ dữ liệu.
  • Mỗi bộ dữ liệu gồm ba dòng:
    • Dòng thứ nhất chứa số nguyên n: số cột của bảng.
    • Dòng thứ hai chứa n số nguyên a1,1,a1,2,,a1,n: hàng thứ nhất.
    • Dòng thứ ba chứa n số nguyên a2,1,a2,2,,a2,n: hàng thứ hai.

Dữ liệu ra

Với mỗi bộ dữ liệu:

  • Nếu không thể biến cả hai hàng thành hoán vị, in ra 1.
  • Ngược lại, in ra số nguyên k là số bước ít nhất trên một dòng, rồi in ra k chỉ số cột đôi một khác nhau pos1,pos2,,posk (1posin) theo thứ tự bất kỳ trên dòng tiếp theo. Nếu k=0 thì dòng thứ hai để trống.

Nếu có nhiều đáp án cùng đạt số bước ít nhất, in ra đáp án nào cũng được.

Ràng buộc

  • 1t2·104
  • 1n2·105
  • 1a1,i,a2,in
  • Tổng n trên tất cả các bộ dữ liệu không vượt quá 2·105.

Ví dụ

Input Output Giải thích
6
4
1 2 3 4
2 3 1 4
5
5 3 5 1 4
1 2 3 2 4
3
1 2 1
3 3 2
4
1 2 2 1
3 4 3 4
4
4 3 1 4
3 2 2 1
3
1 1 2
3 2 2
0
2
3 2
1
1
2
4 3
2
4 3
-1
Bộ 1: hai hàng đã là hoán vị nên không cần bước nào. Bộ 2: đổi cột 3 và cột 2 cho ta hàng 1 là 5 2 3 1 4 và hàng 2 là 1 3 5 2 4. Bộ 6: giá trị 2 xuất hiện ba lần trong bảng nên không thể.
4
1
1
1
2
1 1
2 2
3
1 2 3
1 2 3
2
1 2
2 1
0
1
2
0
0
Bộ 2: hai hàng đang là 1 1 và 2 2; đổi chỗ cột 2 cho ta 1 2 và 2 1. Bộ 3: mỗi giá trị nằm trọn trong một cột nên dù đổi chỗ hay không, hai hàng vẫn giống nhau và đều là hoán vị.

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