Trao đổi quà

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2100 (p) Thời gian: 2.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Một tiết mục đáng mong chờ của đêm trung thu ở xóm của Thu, mỗi thiếu nhi sẽ chuẩn bị một phần quà của mình và sẽ trao đổi quà với nhau. Sau đêm trung thu, thiếu nhi thứ \(p_i\) sẽ nhận được quà của thiếu nhi thứ \(i\) và mỗi thiếu nhi nhận được đúng một phần quà. Một cách chia quà \(p_1, p_2,...,p_n\) được gọi là đẹp nếu có đúng \(k\) thiếu nhi nhận lại quà của chính mình sau đêm trung thu (\(p_i = i\)).

Một thao tác được thực hiện bằng cách chọn hai số \(i, j\) thỏa mãn \(1 \leq i, j \leq n, \ i \neq j\) và hoán đổi hai giá trị \((p_i, p_j)\). Tìm số thao tác ít nhất cần thực hiện để cách chia quà được gọi là đẹp.

Input

  • Dòng thứ nhất chứa hai số \(n\)\(k\) (\(0 \leq k \leq n\)).
  • Dòng thứ hai gồm \(n\) số \(p_1, p_2,...,p_{n-1},p_n\).

Output

  • Gồm một số duy nhất là đáp án của bài toán. Nếu không tồn tại cách thực hiện các thao tác, in ra \(-1\).

Example

Test 1

Input
5 2
3 2 5 1 4
Output
1
Note

Thực hiện một thao tác với \((i,j)=(4,5)\). Dãy trở thành \(3, 2, 5, 4, 1\).

Scoring

Gọi \(x\) là số lượng vị trí \(i\)\(p_i=i\) trong dãy \(p\) đã cho.

  • Subtask \(1\) (\(25\%\) số điểm): \(x \geq k, n \leq 1000\)
  • Subtask \(2\) (\(25\%\) số điểm): \(x \geq k, n \leq 10^5\)
  • Subtask \(3\) (\(25\%\) số điểm): \(x < k, n \leq 1000\)
  • Subtask \(4\) (\(25\%\) số điểm): \(x < k, n \leq 3\cdot 10^4\)

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: