牛客(除2!)

链接:登录---专业IT笔试面试备考平台_牛客网

来源:牛客网

题目描述

给一个数组,一共有 n n\ n 个数。

你能进行最多 k k\ k 次操作。每次操作可以进行以下步骤:

  • 选择数组中的一个偶数 aia_iai,将其变成 ai/2a_i/2ai/2 。

现在你进行不超过 k k\ k 次操作后,让数组中所有数之和尽可能小。请输出这个最小的和。

思路:

遍历一遍数组,偶数保存在一个大堆中,奇数直接加在结果中。然后每次从堆顶提取元素,即当前最大的偶数,对其除以2,若是奇数则直接加入结果中,若是偶数则重新放入大堆中。

注意:本题结果可能超过INT的范围,因此用long long。

复制代码
#include<algorithm>
#include<iostream>
#include<vector>
#include<math.h>
#include<queue>

using namespace std;

struct cmp
{
    bool operator()(int a,int b)
    {
        return a<b;
    }
};

int main()
	{ 
    int n,k;
    cin>>n>>k;
    priority_queue<int,vector<int>,cmp>qn;
    long long ret=0;
    for(int i=0;i<n;i++)
    {
        int kk=0;
        cin>>kk;
        if(kk%2==0)
            qn.push(kk);
        else
            ret+=kk;
    }
     
    while(k--&&qn.size())
    {
        int kk=qn.top()/2;
        qn.pop();
        if(kk%2==0)
            qn.push(kk);
        else
            ret+=kk;
    }
    while(qn.size())
    {
        ret+=qn.top();
        qn.pop();
    }
    cout << ret;

return 0;
}
相关推荐
咩咩不吃草16 分钟前
【逻辑回归】:从模型训练到评价
算法·机器学习·逻辑回归
ersaijun17 分钟前
机器人运动控制关键算法体系:从理论框架到前沿实践
算法·机器人
smj2302_7968265225 分钟前
解决leetcode第3826题.最小分割分数问题
数据结构·python·算法·leetcode
多多*26 分钟前
2026年最新 测试开发工程师相关 Linux相关知识点
java·开发语言·javascript·算法·spring·java-ee·maven
VT.馒头38 分钟前
【力扣】2705. 精简对象
javascript·数据结构·算法·leetcode·职场和发展·typescript
元亓亓亓1 小时前
LeetCode热题100--136. 只出现一次的数字--简单
算法·leetcode·职场和发展
2301_763472581 小时前
实时系统下的C++编程
开发语言·c++·算法
张祥6422889041 小时前
二次型:从线性代数到测量平差的桥梁
线性代数·算法·机器学习
im_AMBER1 小时前
Leetcode 113 合并 K 个升序链表
数据结构·学习·算法·leetcode·链表
高洁011 小时前
基于物理交互的具身智能决策框架设计
算法·机器学习·数据挖掘·transformer·知识图谱