大致题意:给n个数,求通过操作,让数组中的有K个相同的数的最少操作次数。操作:将数字右移一位,就是除二取整啦。感觉最近中了降智打击,脑袋昏昏沉沉的,还有思考问题的时候像个HP一样。。。。。。。可能是太紧张了,而且休息的不够吧。
解题思路,枚举一下每个数通过操作后的可能值,再用map统计一下不就完了,当然,先对原数组排序一下。最近是真的蠢,这个简单题当时都没有秒。。。。。。。
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+100;
int arr[maxn];
int main()
{
map<int,int>mp;
map<int,int>cnt;
int n,k;
cin>>n>>k;
for(int i=0;i<n;++i)
{
cin>>arr[i];
}
sort(arr,arr+n);
int ans=10000000;
for(int i=0;i<n;++i)
{
int tp=arr[i];
int ct=0;
while(tp)
{
mp[tp]+=ct;
++cnt[tp];
if(cnt[tp]>=k)
{
ans=min(ans,mp[tp]);
}
++ct;
tp>>=1;
}
}
cout<<ans<<endl;
return 0;
}