Paprika và Hoán Vị

Đề bài

Mô tả

Cho một mảng gồm n số nguyên dương a1,a2,,an. Bạn muốn biến mảng này thành một hoán vị của các số nguyên từ 1 đến n.

Để làm điều đó, bạn có thể thực hiện các thao tác. Trong mỗi thao tác, bạn chọn một chỉ số i (1in) và một số nguyên x>0, rồi gán ai:=aimodx (thay ai bằng phần dư của ai khi chia cho x). Ở các thao tác khác nhau, ix được chọn có thể khác nhau.

Hãy xác định số thao tác ít nhất cần thực hiện để biến mảng thành một hoán vị của các số nguyên từ 1 đến n. Nếu không thể, in ra 1.

Một hoán vị là một mảng gồm n số nguyên phân biệt nhận giá trị từ 1 đến n theo thứ tự bất kỳ. Ví dụ, [2,3,1,5,4] là một hoán vị, nhưng [1,2,2] thì không (số 2 xuất hiện hai lần) và [1,3,4] cũng không (với n=3 nhưng có số 4).

Dữ liệu vào

  • Dòng đầu chứa một số nguyên t — số lượng bộ dữ liệu.
  • Với mỗi bộ dữ liệu:
    • Dòng đầu chứa số nguyên n.
    • Dòng thứ hai chứa n số nguyên a1,a2,,an.

Dữ liệu ra

Với mỗi bộ dữ liệu, in ra trên một dòng số thao tác ít nhất cần thực hiện để biến mảng thành một hoán vị của 1 đến n, hoặc 1 nếu không thể.

Ràng buộc

  • 1t104
  • 1n105
  • 1ai109
  • 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
4
2
1 7
3
1 5 4
4
12345678 87654321 20211218 23571113
9
1 2 3 4 18 19 5 6 7
1
-1
4
2
Bộ 1: chọn i=2,x=5 để a2:=7mod5=2, được [1,2] — cần 1 thao tác.
Bộ 2: không thể tạo hoán vị của 1,2,3.
Bộ 4: giảm 188199 là đủ — cần 2 thao tác.
6
1
1
1
1000000000
5
1 2 3 4 5
5
2 2 2 2 2
4
1000000000 1000000000 1000000000 1000000000
3
2 4 6
0
1
0
-1
4
-1
Bộ 3 đã là hoán vị nên cần 0 thao tác. Bộ 4: chỉ giữ được một số 2, ba số 2 còn lại không thể biến thành 1,3,4 nên in 1.

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