Codeforces Round #159 (Div. 2)
发布日期:2021-06-30 15:14:37
浏览次数:2
分类:技术文章
本文共 844 字,大约阅读时间需要 2 分钟。
题意如下:已有n个插排,第i个插排上边有ai个插口。有m个设备,公寓里有k个插口,这k个插口既可以用来插插排也可以直接将设备插到上面,问最少用几个插排能将所有的设备插在上边。记录这道题的目的在于学习priority_queue的使用。代码如下:
#include代码精髓的地方就在于priority_queue的使用,下边详细解释一下代码。我首先定义了一个优先队列pq,注意在默认不定义比较函数的情况下,无论队列的入队顺序如何,队列中的元素总是按照从大到小降序,出队的时候也就越大越先出队,这时候使用pq就有了贪心的味道了。然后注意k的定义,k最初为公寓已有的插孔数量,到后来while循环里边变成了每用掉k中的一个插口后剩余的总共可用的插口数量(包括插在插在插口上边的插排上的插口)。while循环条件是一个&&,当两个条件有一个条件不满足的时候即停止循环,即k>=m或者pq为空的时候停止循环。循环停止的时候如果总共可用的插口数量多于设备数量,那么ans即为所求;若是因为pq空而停止,则意味着插排用光了也没有插完所有的设备,这时候输出-1。#include //使用priority_queue必须包含的头文件using namespace std;int main(){ int n, m, k,a,i,ans=0; cin >> n >> m >> k; priority_queue pq; for (i = 0; i > a; pq.push(a); } while (k < m && !pq.empty()) { k = k - 1 + pq.top(); pq.pop(); ans++; } if (k >= m) cout << ans << endl; else cout << -1 << endl; return 0;}
转载地址:https://jianzhuwang.blog.csdn.net/article/details/45172519 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年05月01日 04时14分29秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
作用域 & 作用域链(ES6学习笔记)
2019-05-01
let & const(ES6学习笔记)
2019-05-01
解构赋值(ES6学习笔记)
2019-05-01
原始值与引用值(ES6学习笔记)
2019-05-01
python使用HTMLTestRunner查看运行函数
2019-05-01
linux系统安装mysql数据库
2019-05-01
接口自动化判断json()取值问题
2019-05-01
fiddler 抓取手机接口
2019-05-01
fiddler怎么抓取手机https请求
2019-05-01
fiddler 安装以及配置
2019-05-01
python的ImportError
2019-05-01
centos最小化安装配置网络问题
2019-05-01
linux安装java环境[JDK1.8]
2019-05-01
linux下安装jenkins+git+python
2019-05-01
jenkins直接安装插件包
2019-05-01
jenkins添加Git项目时报错Failed to connect to repository : Error performing git command: git ls-remote -h
2019-05-01
CentOS 7系统时间与实际时间差8个小时
2019-05-01
3性能测试简介(什么是性能测试?为什么进行性能测试,性能指标分析)
2019-05-01
4loadrunner简介
2019-05-01
5loadrunner脚本优化
2019-05-01