当前位置: 首页 > news >正文

牛客网 除2!(详解)c++

题目链接:除2!

1.题目解析

1:想让数组所有数之和尽可能小,肯定有个想法,就是我每次选数组中偶数的时候,我必定挑一个最大的,因为我挑一个最大的出来,把它变成一半,这个时候总和减小肯定是最多的

2:我们待会儿是要求所有数组元素的和,数据量有100,000这么大,每个数有10的九次方这么大,有可能超出int的范围,所以我们要用long long来存这个数,看到数据范围的时候,大家一定要小心一点,我们是用int还是用long long

结合示例:最多进行三次操作,把10变成5,接下来最大的值是8,把8变成4,这两个4随便挑一个出来变成2,这时它们的加起来是2+4+2+5+11=24

2.算法原理

解法:每次挑选出,当前数组中最大的偶数,然后减小一半,利用大根堆实现

代码:

#include <iostream>
#include <queue>
using namespace std;typedef long long LL;
int n, k;
priority_queue<int> heap; //默认是大根堆int main()
{cin >> n >> k;LL sum = 0;for (int i = 1; i <= n; ++i){int x; cin >> x;sum += x;//偶数进堆if (x % 2 == 0) heap.push(x);}while (heap.size() && k--){int t = heap.top() / 2;heap.pop();sum -= t;//除完后可能还是偶数//用%不用除,比如10/2=5,5/2=2if (t % 2 == 0) heap.push(t);}cout << sum << endl;return 0;
}

http://www.lryc.cn/news/530297.html

相关文章:

  • 被裁与人生的意义--春节随想
  • ASP.NET Core 中间件
  • Pyecharts之图表样式深度定制
  • git笔记-简单入门
  • Joplin 插件在Vscode中无法显示图片
  • python学opencv|读取图像(四十七)使用cv2.bitwise_not()函数实现图像按位取反运算
  • pandas分组
  • 爬虫基础(三)Session和Cookie讲解
  • 【Super Tilemap Editor使用详解】(十三):快捷键指南(Keyboard Shortcuts)
  • 【Leetcode 每日一题】119. 杨辉三角 II
  • 简单看看会议系统2(时延分析)(TODO)
  • Linux中 端口被占用如何解决
  • OpenAI o3-mini全面解析:最新免费推理模型重磅发布
  • C++:虚函数与多态性习题2
  • 利用metaGPT多智能体框架实现智能体-1
  • Kubernetes组成及常用命令
  • oracle: 多表查询之联合查询[交集intersect, 并集union,差集minus]
  • 力扣第149场双周赛
  • AI开发之 ——Anaconda 介绍
  • Spring中ObjectProvider的妙用与实例解析
  • Easy系列PLC尺寸测量功能块(激光微距应用)
  • 当卷积神经网络遇上AI编译器:TVM自动调优深度解析
  • 《网络编程基础之完成端口模型》
  • Axure PR 9 旋转效果 设计交互
  • 完美还是完成?把握好度,辨证看待
  • C++的类Class
  • C++中的内存管理
  • MySQL为什么默认引擎是InnoDB ?
  • ComfyUI安装调用DeepSeek——DeepSeek多模态之图形模型安装问题解决(ComfyUI-Janus-Pro)
  • 电脑要使用cuda需要进行什么配置