Equalizing by Division (hard version)
2019-09-17 19:34 木木王韦 阅读(182) 评论(0) 收藏 举报Equalizing by Division (hard version)
Codeforces题目链接
这道题的意思是至少有多少次除2操作,是数组中出现k个相等的数。
困难版和简单版的差别在于数据范围。
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int a[200020];
int n,k;int b[200020];
int c[200020];
int main(){
cin>>n>>k;
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
int minn=0x3f3f3f3f;
for(int i=0;i<n;i++){
int tt=0;
int kk=a[i];
while(kk){
b[kk]++;
c[kk]+=tt;
if(b[kk]==k){
minn=min(minn,c[kk]);
}
kk/=2;
tt++;
}
}
cout<<minn<<endl;
return 0;
} //by lw
浙公网安备 33010602011771号