CodeForces-1213D Equalizing by Division

Description

You are given an array a consisting of n integers. In one move you can choose any aiai and divide it by 2 rounding down (in other words, in one move you can set \(a_i=\lfloor \frac{a_i}{2} \rfloor\)).c++

You can perform such an operation any (possibly, zero) number of times with any aiai.ide

Your task is to calculate the minimum possible number of operations required to obtain at least kk equal numbers in the array.ui

Don't forget that it is possible to have ai=0ai=0 after some operations, thus the answer always exists.spa

Input

The first line of the input contains two integers nn and kk (1≤k≤n≤2⋅1051≤k≤n≤2⋅105) — the number of elements in the array and the number of equal numbers required.code

The second line of the input contains nn integers a1,a2,…,ana1,a2,…,an (1≤ai≤2⋅1051≤ai≤2⋅105), where aiai is the ii-th element of aa.orm

Output

Print one integer — the minimum possible number of operations required to obtain at least kk equal numbers in the array.排序

Examples

input

5 3
1 2 2 4 5

output

1

input

5 3
1 2 3 4 5

output

2

input

5 3
1 2 3 3 3

output

0

題解

直接暴力分解。ip

排序一遍以後統計每一個數出現了多少次,出現k次的時候更新一遍答案便可,打div3的時候硬是沒想到,基礎過差element

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 50;
int cnt[N];
int num[N];
int a[N];
int main() {
    int n, k;
    scanf("%d%d", &n, &k);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
    }
    sort(a + 1, a + n + 1);
    int res = 1e9;
    for (int i = 1; i <= n; i++) {
        int tmp = 0;
        while (a[i]) {
            cnt[a[i]]++;
            num[a[i]] += tmp;
            if (cnt[a[i]] == k) {
                res = min(res, num[a[i]]);
            }
            tmp++; a[i] /= 2;
        }
    }
    printf("%d\n", res);
    return 0;
}
相關文章
相關標籤/搜索