蓝桥杯备考:数据结构堆之 除2!

这道题我们可以用优先级队列来解决,我们的算法思路如下:

先把n个数的和加起来 并把是偶数的值插入到优先级队列里面

接下来如果队列有值并且你还有操作次数,你就不断的把最大的偶数除2,并且判断除2的结果是不是偶数,如果是偶数继续插入到堆里面

cpp 复制代码
#include <iostream>
#include <queue>
typedef long long ll;
using namespace std;
ll sum;
ll n,k;
priority_queue <int> heap;
int main()
{
    cin >> n >> k;
    ll x;
    for(int i = 1;i<=n;i++)
    {
        cin >> x;
        sum+=x;
        if(x%2 == 0) heap.push(x);
    }
    while(k--&&heap.size())
    {
       ll t = heap.top();heap.pop();
        sum-=t;
        t/=2;
        if(t%2==0) heap.push(t);
        sum+=t;
        
        
    }
    cout << sum << endl;
    
    return 0;
}
相关推荐
ValhallaCoder3 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
月挽清风4 小时前
代码随想录第十五天
数据结构·算法·leetcode
NEXT065 小时前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法
小妖6668 小时前
js 实现快速排序算法
数据结构·算法·排序算法
独好紫罗兰10 小时前
对python的再认识-基于数据结构进行-a003-列表-排序
开发语言·数据结构·python
wuhen_n10 小时前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
2401_8414956411 小时前
【LeetCode刷题】二叉树的层序遍历
数据结构·python·算法·leetcode·二叉树··队列
独好紫罗兰11 小时前
对python的再认识-基于数据结构进行-a002-列表-列表推导式
开发语言·数据结构·python
2401_8414956411 小时前
【LeetCode刷题】二叉树的直径
数据结构·python·算法·leetcode·二叉树··递归
数智工坊11 小时前
【数据结构-树与二叉树】4.5 线索二叉树
数据结构