CCPC-Wannafly Winter Camp Day5 (Div2, onsite) C Division 暴力
把每个数先压到优先队列中,每次操作取队顶元素除2再压进去,同时判断下队顶是否为0,如果为0就没必要继续操作了。因为数大小1e9所以每个数最多就操作30次。
#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+7;
priority_queue<int>a;
int main(){
int n,k,aa;
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++){
scanf("%d",&aa);
a.push(aa);
}
ll ans=0;
for(int i=0;i<k;i++){
aa=a.top();
a.pop();
if(aa==0){
break;
}
a.push(aa/2);
}
while(!a.empty()){
if(a.top()==0)break;
ans+=a.top();
a.pop();
}
printf("%lld\n",ans);
return 0;
}