Làm k phần tử bằng nhau

Đề bài

Mô tả

Cho dãy a gồm n phần tử và số nguyên k với kn.

Bạn muốn thu được ít nhất k phần tử có cùng giá trị trong dãy a. Ở mỗi nước đi, bạn được thực hiện đúng một trong hai thao tác sau:

  • Chọn một phần tử nhỏ nhất hiện tại của dãy và tăng giá trị của nó lên 1 (chính xác hơn, nếu mn là giá trị nhỏ nhất trong a thì bạn chọn chỉ số i sao cho ai=mn và gán ai:=ai+1).
  • Chọn một phần tử lớn nhất hiện tại của dãy và giảm giá trị của nó đi 1 (chính xác hơn, nếu mx là giá trị lớn nhất trong a thì bạn chọn chỉ số i sao cho ai=mx và gán ai:=ai1).

Hãy tính số nước đi tối thiểu để trong dãy a có ít nhất k phần tử bằng nhau.

Dữ liệu vào

  • Dòng đầu tiên chứa hai số nguyên nk.
  • Dòng thứ hai chứa n số nguyên a1,a2,,an.

Dữ liệu ra

  • In ra một số nguyên duy nhất: số nước đi tối thiểu cần thực hiện để có ít nhất k phần tử bằng nhau trong dãy.

Ràng buộc

  • 1kn2·105
  • 1ai109

Ví dụ

Input Output Giải thích
6 5
1 2 2 4 2 3
3 Tăng phần tử có giá trị 1 lên 2 (1 nước đi), giảm phần tử có giá trị 4 xuống 3 rồi xuống 2 (2 nước đi). Tổng cộng 3 nước đi, ta được dãy [2,2,2,2,2,3]5 phần tử bằng 2.
7 5
3 3 2 1 1 1 3
4 Tăng cả ba phần tử 1 lên 2 mất 3 nước đi, sau đó giảm một phần tử 3 xuống 2 mất 1 nước đi. Dãy thu được có ít nhất 5 phần tử bằng 2.

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