【牛客 - 369B】小A与任务(贪心,优先队列)

题干:

链接:https://ac.nowcoder.com/acm/contest/369/B
来源:牛客网
 

小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一个任务

第 i 个任务需要花费  xixi 的时间,同时完成第 i 个任务的时间不能晚于 yiyi ,时间掌控者向小A提出了一个条件:如果完成第 i 个任务的时间本应是 t ,但小A支付 m 个金币的话,他可以帮助小A在 t−m×zit−m×zi  时刻完成第 i 个任务, zizi 是时间参数,会在输入中给出

小A想按时完成所有任务,请你帮他制定一个花费金币最少的方案

注意:不能使得某个任务的花费时间小于 0 ,花费的金币可以不是整数

输入描述:

第一行一个整数 n ,表示小A的任务数量
接下来n行,每行三个整数,分别表示 zi,xi,yizi,xi,yi

输出描述:

一行一个实数,表示小A最少需要花费的金币数,四舍五入保留一位小数

示例1

输入

复制

5
1 1 2
1 1 3
1 2 4
1 1 4
1 2 5

输出

复制

2.0

说明

在1时刻完成第一个任务,2时刻完成第二个任务,4时刻完成第三个任务,花费1金币在4时刻完成第四个任务,花费1金币在5时刻完成第五个任务

备注:

1≤n≤2×1051≤n≤2×105

1≤xi,zi≤3×1031≤xi,zi≤3×103

1≤yi≤105

解题报告:

贪心。

以完成时间为关键字从小到大排序(可以交换两个完成时间不同的任务来证明这样的正确性),按这个顺序来做任务,同时维护一个关于 zi 的大根堆,如果规定时间内完不成任务,就从堆里取出 zi 最大的任务来花费金币,维护每个任务的剩余时间,如果花费金币后剩余时间不为 0 则重新push入堆

其实是连续两次贪心的决策:

首先贪心按照y关键字排序来确定完成任务的顺序。

然后如果有任务已经在当前局面下完成不了了,那也不一定要让他提前,也可以选择让前面已经完成过的任务提前完成。这也就是第二步贪心的决策。这一过程是用优先队列动态维护的。

注意,虽然这样看起来好像是同一个任务分开时间完成的(反正代码看起来应该是这样的)(因为题目要求一个任务需要连续完成,也就是不能这个任务做一半了去开另一个任务),但是实际上执行的时候是连续完成的,因为这里在优先队列中作差的不是任务,而是任务提前完成的时间。也就是假设这个任务需要五分钟完成,我们可以让他先提前两分钟完成,后面下了一个命令,要求他在提前十分钟完成,但是没办法了只能再提前三分钟了,所以就先能提前多少就提前多少,是在不够了再去优先队列中找z第二大的元素去提前完成。

这种操作相当于是用优先队列推迟了操作,也是提供了反悔的机会,当后面确实需要反悔的时候,可以贪心的选择一个最优的决策进行反悔。

复杂度 O(nlogn)

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 2e5 + 5;
typedef pair<ll,ll> PLL;
struct Node {ll z,x,y;//第 i 个任务需要花费 xi 的时间,同时完成第 i 个任务的时间不能晚于 yi ,zi是时间参数
} node[MAX];
bool cmp(Node a,Node b) {return a.y < b.y;
}
int main()
{int n;cin>>n;for(int i = 1; i<=n; i++) cin>>node[i].z>>node[i].x>>node[i].y;sort(node+1,node+n+1,cmp);double ans = 0;ll cur = 0;priority_queue<PLL> pq;for(int i = 1; i<=n; i++) {pq.push(pm(node[i].z,node[i].x));cur += node[i].x;while(cur > node[i].y) {PLL now = pq.top();pq.pop();ll t = min(now.second,cur - node[i].y);ans += 1.0*t/now.first;cur -= t;now.second -= t;if(now.second) pq.push(now);}}printf("%.1f\n",ans);return 0 ;}

 

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

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

相关文章

word硬回车是怎么产生的_在word中怎样删除软硬回车?

1.点击“开始”&#xff0d;“程序”&#xff0d;“附件”&#xff0d;“记事本”&#xff0c;打开“记事本”&#xff0c;放在一边。2.打开需要调整的Word文档&#xff0c;在文章的任意处单击一下鼠标左键。然后按住键盘的“Ctrl”键不要松&#xff0c;再按一下“A”键&#x…

*【POJ - 3659】Cell Phone Network (树形dp,最小支配集)

题干&#xff1a; Farmer John has decided to give each of his cows a cell phone in hopes to encourage their social interaction. This, however, requires him to set up cell phone towers on his N (1 ≤ N ≤ 10,000) pastures (conveniently numbered 1..N) so the…

测试jdbc连mysql数据库_java连接mysql数据库及测试是否连接成功的方法

本文实例讲述了java连接mysql数据库及测试是否连接成功的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;package com.test.tool;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import…

mysql配置日志老化配置_mysql配置-日志大小限制和自动删除

线上的项目磁盘消耗问题, 发现和MySQL日志有关系.需要处理的问题如何限制大小 不让日志无限膨胀?配置日志不留?删除的方式和直接删除会对服务有什么影响?解决方式限制大小, 保留最近一段时间日志.set global expire_logs_days7; # 命令行进入MySQL中, 临时设置保留最近7天日…

【HDU - 5091】Beam Cannon(线段树,扫描线)

题干&#xff1a; Recently, the γ galaxies broke out Star Wars. Each planet is warring for resources. In the Star Wars, Planet X is under attack by other planets. Now, a large wave of enemy spaceships is approaching. There is a very large Beam Cannon on t…

mysql的传播特性_spring事务传播特性和mysql事务隔离级别

spring事务的传播特性--7种REQUIRED支持当前事务&#xff0c;如果没有事务会创建一个新的事务SUPPORTS支持当前事务&#xff0c;如果没有事务的话以非事务方式执行MANDATORY(强制性)支持当前事务&#xff0c;如果没有事务抛出异常REQUIRES_NEW创建一个新的事物并挂起当前事务NO…

【 HDU - 5093】Battle ships(匈牙利算法,二分图匹配)

题干&#xff1a; Dear contestant, now you are an excellent navy commander, who is responsible of a tough mission currently. Your fleet unfortunately encountered an enemy fleet near the South Pole where the geographical conditions are negative for both si…

【HDU - 5090】Game with Pearls (匈牙利算法,二分图匹配)

题干&#xff1a; Tom and Jerry are playing a game with tubes and pearls. The rule of the game is: 1) Tom and Jerry come up together with a number K. 2) Tom provides N tubes. Within each tube, there are several pearls. The number of pearls in each tube i…

qt同时连接oracle和mysql_QT连接Oracle和Mysql的详细步骤,已成功~!

近几天一直在整QT的数据库连接这一块。因为QT是开源的&#xff0c;所以涉及的连接Oracle及Mysql的驱动都必须自己编译生成。通过不断的测试、调试&#xff0c;终于把QT连接Oracle和Mysql的驱动编译生成好了。QT环境&#xff1a;Qt 4.6.0打开Qt Command Prompt&#xff0c;开始菜…

【POJ - 2632】Crashing Robots(模拟)

题干&#xff1a; In a modernized warehouse, robots are used to fetch the goods. Careful planning is needed to ensure that the robots reach their destinations without crashing into each other. Of course, all warehouses are rectangular, and all robots occup…

一台linux上运行多个mysql_linux下同时运行多个mysql

来自网络&#xff0c;感谢开源&#xff0c;感谢分享通过rpm安装mysql&#xff0c;测试版本5.1.481、在linux下通过:#useradd multi -g mysql -s /sbin/nologin添加一个multi用户&#xff0c;并加入到mysql组#passwd multi给multi用户添加密码&#xff0c;这里设置的密码为multi…

【SPOJ - QTREE2】Query on a tree II(LCA,倍增)

题干&#xff1a; You are given a tree (an undirected acyclic connected graph) with N nodes, and edges numbered 1, 2, 3...N-1. Each edge has an integer value assigned to it, representing its length. We will ask you to perfrom some instructions of the foll…

pandownload用户未登录_Pandownload再度复活,下载速度飙升到10MB/s以上

PanDownload再度复活版&#xff0c;此版镜像服务器由新城旧梦维护卢本伟修改版&#xff0c;基本都是维持在10M/S的下载速度&#xff0c;如果你的宽带够大&#xff0c;下载速度会更快&#xff0c;无需安装即可免费使用&#xff0c;但是需要登陆才能下载。(Pandownload卢本伟修改…

【蓝桥杯 - 试题】立方尾不变(tricks,快速取出一个数字的后n位)

题干&#xff1a; 有些数字的立方的末尾正好是该数字本身。 比如&#xff1a;1,4,5,6,9,24,25,.... 请你计算一下&#xff0c;在10000以内的数字中&#xff08;指该数字&#xff0c;并非它立方后的数值&#xff09;&#xff0c;符合这个特征的正整数一共有多少个。 请提交该…

momentjs转换格式_Moment.js+Vue过滤器的使用,各种时间格式转换为YYYY-MM-DD HH:mm:ss格式...

前言这篇文章将Moment.js与vue过滤器连用。如果不会过滤器的朋友&#xff0c;可以先看这篇文章vue过滤器一、Moment.js是什么&#xff1f;Moment.js是JavaScript 日期处理类库。使用场景&#xff1a;vue项目中经常需要将时间戳转换为各种时间格式再显示。二、使用步骤1.安装这里…

【HDU - 1943】Ball bearings(几何问题)

题干&#xff1a; The Swedish company SKF makes ball bearings. As explained by Britannica Online, a ball bearing is “one of the two types of rolling, or anti friction, bearings (the other is the roller bearing). Its function is to connect two machine mem…

mysql显示修改密码_MySQL修改密码

第一种方式&#xff1a;最简单的方法就是借助第三方工具Navicat for MySQL来修改&#xff0c;方法如下&#xff1a;1、登录mysql到指定库&#xff0c;如&#xff1a;登录到test库。2、然后点击上方“用户”按钮。3、选择要更改的用户名&#xff0c;然后点击上方的“编辑用户”按…

【POJ - 2486】Apple Tree (树形背包,dp)

题干&#xff1a; Wshxzt is a lovely girl. She likes apple very much. One day HX takes her to an apple tree. There are N nodes in the tree. Each node has an amount of apples. Wshxzt starts her happy trip at one node. She can eat up all the apples in the no…

mysql 磁盘组_有效管理 ASM 磁盘组空间

ORA-15041: diskgroup space exhausted 对您的数据库环境的直接和间接影响&#xff1f;与 ASM 磁盘组相关的磁盘空间问题和 ORA-15041 错误会ORA-15041: diskgroup space exhausted 对您的数据库环境的直接和间接影响&#xff1f;与 ASM 磁盘组相关的磁盘空间问题和 ORA-15041 …

【HDU - 1561】The more, The Better(树形背包,dp,依赖背包问题与空间优化,tricks)

题干&#xff1a; ACboy很喜欢玩一种战略游戏&#xff0c;在一个地图上&#xff0c;有N座城堡&#xff0c;每座城堡都有一定的宝物&#xff0c;在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物。但由于地理位置原因&#xff0c;有些城堡不能直接攻克&#xff0c;要攻克这些…