吃鸡蛋-优先队列

题目描述

小林养了一只母鸡,一连 n 天,每天都可以生下若干个鸡蛋。在第 i 天,母鸡会生下 eggs[i] 个鸡蛋,这些鸡蛋将会在days[i] 天后(也就是说,第 i + days[i] 天时)腐烂,变得无法食用。也可能有那么几天,母鸡不会生下新的鸡蛋,此时用 eggs[i] = 0 且 days[i] = 0 表示。你打算每天最多吃一个鸡蛋来保证营养均衡。注意,你可以在这 n 天之后继续吃鸡蛋。给你两个长度为 n 的整数数组 eggs 和 days ,返回你可以吃掉的鸡蛋的最大数目。
输入格式

第一行一个整数n
第二行输入n个整数(空格分开),代表每一天母鸡下蛋数
第三行输入n个整数(空格分开),代表每一天鸡蛋的保质期

输出格式

一个整数,你可以吃掉的鸡蛋的最大数目。
输入输出样例
输入 #1

5
1 2 3 5 2
3 2 1 4 2

输出 #1

7

输入 #2

6
3 0 0 0 0 2
3 0 0 0 0 2

输出 #2

5

说明/提示

对于样例一:

第一天,你吃掉第一天生下的鸡蛋。
第二天,你吃掉一个第二天生下的鸡蛋。
第三天,你吃掉一个第二天生下的鸡蛋。过了这一天,第三天生下的鸡蛋就已经腐烂了。
第四天到第七天,你吃的都是第四天生下的鸡蛋。

对于样例二:

第一天到第三天,你吃的都是第一天生下的鸡蛋。
第四天和第五天不吃鸡蛋。
第六天和第七天,你吃的都是第六天生下的鸡蛋。

1 <= n <= 20000 0 <= eggs[i], days[i] <= 20000

解题思路:
利用优先队列对新加入的鸡蛋进行排序(保质期由短到长),模拟每一天的生蛋弃蛋吃蛋过程。
在前n天里有生蛋的加入优先队列中;检查优先队列中过保质期的蛋舍弃掉;再将保质期最短但未过期的蛋吃掉一个。
最后统计得到吃鸡蛋数。

代码如下:

#include <iostream>
#include <queue>
using namespace std;
const int N = 20010;
int s[N], t[N];struct EGG {int num;int e;friend bool operator < (const EGG &a, const EGG &b) {return a.e > b.e;}
};int ans = 0;
int main() {int n;cin >> n;for (int i = 1; i <= n; i++)cin >> s[i];for (int i = 1; i <= n; i++) {cin >> t[i];if (s[i] > t[i])s[i] = t[i];//鸡蛋有2个,保质期才1天,那2个鸡蛋最多吃一个,所以我们可以认为这天鸡蛋只有一个。}priority_queue<EGG>q;for (int i = 1; i <= n || !q.empty(); i++) {if (i <= n)//因为n天后,我们还可以吃鸡蛋,所以加这个条件{if (s[i] != 0) {EGG egg;egg.num = s[i];egg.e = i + t[i];//假如今天是第2天,下了一个保质期2天的蛋,那它在第4天腐烂(吃不了),所以为i+t[i]q.push(egg);}}while (!q.empty()) {EGG badegg = q.top();if (badegg.e <= i) //保质期过了,将腐烂的出队{q.pop();} elsebreak;}if (!q.empty()) {EGG oneegg;oneegg = q.top();oneegg.num--;if (oneegg.num == 0) {q.pop();}
//			else {
//				q.pop();
//				q.push(oneegg);
//			}ans++;}}cout << ans << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311200.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

交通标志识别教程(二)

项目结构图 下载好项目压缩包后解压&#xff0c;得到以上的文件&#xff0c;首先将画红圈的文件删除&#xff08;如果有&#xff09; 安装软件 解压软件包 安装Anaconda 直接下一步&#xff0c;到了这个页面全部勾选&#xff0c;否则不会添加添加环境变量。 安装Pycharm …

深度长文:Power Automation 帮助企业实现数字化转型

01自动化始于您在Ignite 2019上&#xff0c;我们宣布将Flow更改为Power Automate&#xff0c;并在UI Flow连接器的公开预览中引入了机器人流程自动化&#xff08;RPA&#xff09;。我们对几种激动人心的功能感到兴奋&#xff0c;这些功能将在今年全面上市&#xff0c;并想花一点…

数字电路技术可能出现的简答题_数字电子技术复习题(本科)

1数字电子技术复习题(本科)一、简答题&#xff1a;1、简述组合电路和时序电路各自的特点是什么&#xff1f;答&#xff1a;组合电路的特点&#xff1a;任何时刻电路的稳定输出&#xff0c;仅取决于该时刻各个输入变量的取值&#xff0c;组合电路是由门电路组合而成&#xff0c;…

hdu2544 最短路-Floyd算法

Problem Description 在每年的校赛里&#xff0c;所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候&#xff0c;却是非常累的&#xff01;所以现在他们想要寻找最短的从商店到赛场的路线&#xff0c;你可以帮助他们…

Pandas的Timestamp转为datetime 类型

在Pandas中我们在处理时间序列的时候常用的方法有&#xff1a; pd.to_datetime()pd.date_range() pandas生成时间索引 # pd.date_range() index pd.date_range("20210101",periods20) index Out[29]: DatetimeIndex([2021-01-01, 2021-01-02, 2021-01-03, 2021-…

什么样的女生适合学计算机?

我需要在这一行中加一些字数&#xff0c;为什么呢&#xff1f;因为我的字数不够300字&#xff0c;无法声明原创&#xff0c;所以我会在这里加一些字数&#xff0c;它们是白色的&#xff0c;你应该看不到&#xff0c;如果你此刻看到了&#xff0c;那你真的太机智了。300字&#…

ora-00923数据类型不一致_小白学 Python(2):基础数据类型(上)

如果我的文章对您有帮助&#xff0c;请关注支持下作者的公众号&#xff1a;极客挖掘机&#xff0c;获取最新干货推送&#xff1a;)人生苦短&#xff0c;我选Python引言前文传送门小白学 Python(1)&#xff1a;开篇接触一门新的语言&#xff0c;肯定要先了解它的基础数据类型。啥…

Floyd最短路径算法

Floyd最短路径算法适用于节点(n<200)的图&#xff0c;允许边权值为负。 代码如下&#xff1a; #include <iostream> using namespace std; const int N 110; const int INF 1 << 30; int g[N][N]; int n, m;void Floyd() {for (int k 1; k < n; k)for (i…

如何将项目上传到github详细完整版

今天介绍如何利用pycharm创建一个新的项目&#xff0c;然后将项目上传到github&#xff0c;以便日后的学习记录&#xff0c;和版本管理。比如现在我想创建一个项目专门用来学习和研究时间序列算法。 创建虚拟环境 # 创建一个新的虚拟环境 conda create -n TimeSeries python3…

[Abp vNext微服务实践] - 搭建租户管理服务

一、简介ABP模板项目中已经提供了租户登录和管理功能&#xff0c;但是模板项目是单体应用结构&#xff0c;无法单独部署租户服务&#xff0c;所以难以满足微服务的需求。本篇文章将会介绍搭建ABP租户管理服务&#xff0c;并单独部署应用。二、创建工程2.1 创建TenantService.Ho…

hdu2544 最短路-邻接表+优先队列实现dijkstra

Problem Description 在每年的校赛里&#xff0c;所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候&#xff0c;却是非常累的&#xff01;所以现在他们想要寻找最短的从商店到赛场的路线&#xff0c;你可以帮助他们…

cli2弃用了吗 vue_vue cli - 2 升级到 3的问题汇总

基于已有项目从cli 2项目升级到cli 3项目中&#xff0c;需要修改的几项多页面更改vue.config.js配置&#xff0c; 遍历src/views目录下的所有入口文件&#xff0c;生成多个entry对象const site require(yargs).argv.siteconst glob require(glob)const path require(path)mo…

C++实现dijkstra单源最短路径算法-邻接表+优先队列

dijkstra单源最短路径算法不允许边权值为负&#xff0c;适用的图范围可以很大。 代码如下&#xff1a; #include <iostream> #include <queue> #include <vector> #include <string> using namespace std; const int N 1e8; bool done[N]; int dis[N…

编写高性能的C#代码(三)使用SPAN

原文来自互联网&#xff0c;由长沙DotNET技术社区编译。如译文侵犯您的署名权或版权&#xff0c;请联系小编&#xff0c;小编将在24小时内删除。作者介绍&#xff1a;史蒂夫戈登&#xff08;Steve Gordon&#xff09;是Microsoft MVP&#xff0c;Pluralsight的作者&#xff0c;…

pycharm配置git拉取项目代码,并添加版本控制

安装Git 打开网页进入git官网&#xff0c;找到git官网下载地址&#xff0c;下载git工具并且安装。 pycharm配置git 点击File -> Settings -> Version Control -> Git 选择Git安装的路径&#xff0c;点击OK 选择一个项目 进入我们需要拉取的项目&#xff0c;点击…

mpu 配置内存空间_mpu内存保护单元功能及工作原理

一些嵌入式系统使用多任务的操作和控制。这些系统必须提供一种机制来保证正在运行的任务不破坏其他任务的操作。即要防止系统资源和其他一些任务不受非法访问。嵌入式系统有专门的硬件来检测和限制系统资源的访问。它能保证资源的所有权&#xff0c;任务需要遵守一组由操作环境…

poj3981 字符串替换-字符串的基本操作

Description 编写一个C程序实现将字符串中的所有"you"替换成"we" Input 输入包含多行数据 每行数据是一个字符串&#xff0c;长度不超过1000 数据以EOF结束 Output 对于输入的每一行&#xff0c;输出替换后的字符串 Sample Input you are what you do…

.NET Core开发实战(第22课:异常处理中间件:区分真异常与逻辑异常)--学习笔记(上)...

22 | 异常处理中间件&#xff1a;区分真异常与逻辑异常这一节我们来讲解一下错误处理的最佳实践系统里面异常处理&#xff0c;ASP.NET Core 提供了四种方式1、异常处理页2、异常处理匿名委托方法3、IExceptionFilter4、ExceptionFilterAttribute源码链接&#xff1a;https://gi…

MYSQL开窗函数详解

基本概念 MYSQL8.0支持窗口函数&#xff08;Window Function&#xff09;&#xff0c;也称分析函数。窗口函数与组分聚合函数类似&#xff0c;但是每一行数据都会生成一个结果。如果我们将mysql与pandas中的DataFrame做类比学习的话他们的对应关系如下&#xff1a; SQL分组聚…

callmode php_Rabbitmq各方法的作用详解

exchange_declare(direct_logs,direct,false,false,false);// 这个是申明交换器&#xff0c;如果没有申明就给默认队列的这个交换器&#xff0c;而且发送的类型默认是direct)顺序参数名默认值作用1$exchange无交换机名2$type无交换机类型&#xff0c;分别有direct、fanout、top…