洛谷 P1190 接水问题 题解
P1190 接水问题
题目描述
学校里有一个水房,水房里一共装有 \(m\) 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1。
现在有 \(n\) 名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从 1 到 \(n\) 编号,\(i\) 号同学的接水量为 \(w_i\) 。接水开始时,\(1\) 到 \(m\) 号同学各占一个水龙头,并同时打开水龙头接水。当其中某名同学 \(j\) 完成其接水量要求 \(w_j\) 后,下一名排队等候接水的同学 \(k\) 马上接替 \(j\) 同学的位置开始接水。这个换人的过程是瞬间完成的,且没有任何水的浪费。即 \(j\) 同学第 \(x\) 秒结束时完成接水,则 \(k\) 同学第 \(x+1\) 秒立刻开始接水。若当前接水人数 \(n'\) 不足 \(m\),则只有 \(n'\)个龙头供水,其它 \(m−n’\)个龙头关闭。
现在给出 \(n\) 名同学的接水量,按照上述接水规则,问所有同学都接完水需要多少秒。
输入格式
第 1 行 2 个整数 \(n\) 和 \(m\),用一个空格隔开,分别表示接水人数和龙头个数。
第 2 行 \(n\) 个整数 \(w_1,w_2,…,w_n\),每两个整数之间用一个空格隔开,\(w_i\)表示 \(i\) 号同学的接水量。
输出格式
1 个整数,表示接水所需的总时间。
输入输出样例
输入 #1
5 3
4 4 1 2 1
输出 #1
4
输入 #2
8 4
23 71 87 32 70 93 80 76
输出 #2
163
说明/提示
【输入输出样例 1 说明】
第 1 秒,3人接水。第 1秒结束时,1,2,3 号同学每人的已接水量为 1,3 号同学接完水,4 号同学接替 3 号同学开始接水。
第 2 秒,3 人接水。第 2 秒结束时,1,2 号同学每人的已接水量为 2,4 号同学的已接水量为 1。
第 3 秒,3 人接水。第 3 秒结束时,1,2 号同学每人的已接水量为 3,4 号同学的已接水量为2。4 号同学接完水,5 号同学接替 4 号同学开始接水。
第 4 秒,3 人接水。第 4 秒结束时,1,2 号同学每人的已接水量为 4,5 号同学的已接水量为 1。1,2,5 号同学接完水,即所有人完成接水的总接水时间为 4 秒。
【数据范围】
\(1≤n≤10000,1≤m≤100\) 且 \(m≤n\);
\(1≤w_i≤100\) 。
【思路】
贪心 + 模拟
又是没读好题目惹的祸,
导致明明是一道很好做的题目花了好久的时间
明明没有那么复杂,只需要输入的顺序排队就好
我却因为没读好题目
想贪心将没接水的人里面需要接水最多的人
和正在接水的某一个水龙头上目前需要接水的人的接水总量最少的那一个组合在一起
还想当然的弄了两个优先队列,
没想到需要按照输入的顺序
不能插队啊!插队是不文明行为!
贪心思想:
目前这个需要接水的人应该去水龙头里面目前需要接水的人的接水总量最少的那一个
这样会使消耗的时间最少
因为除了选择那一个接水总量最少的,
你选择别的都会有可能使需要消耗的时间
也就是接水总量最大值变得更大
因为 如果 a > b,现在你有一个c,
你放到a里面之后加起来的值a + c 一定小于 b + c
这是很显然的
只需要用一个优先队列和一个普通队列来储存他们排队的顺序来处理
现将前m个放入优先队列(小根堆)中,剩余的放入普通队列
每一次都把普通队列的队首和优先队列的队首(即最小值)拿出来相加起来
然后再放进优先队列里面
这样重复下去直到普通队列变为空
最后输出优先队列里面最后一个元素
也就是最大值就可以了
【完整代码】
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
queue<int>q;
priority_queue<int,vector<int>,greater<int> > s;
int main()
{
int n,m;
int qwq;
scanf("%d%d",&n,&m);
for(int i = 1;i <= m;++ i)
scanf("%d",&qwq),s.push(qwq);
for(int i = m + 1;i <= n;++ i)
{
scanf("%d",&qwq),q.push(qwq);
}
while(!q.empty())
{
int awa = q.front();q.pop();
int owo = s.top();s.pop();
s.push(awa + owo);
}
int ans;
while(!s.empty())
{
ans = s.top();
s.pop();
}
cout << ans << endl;
return 0;
}
洛谷 P1190 接水问题 题解的更多相关文章
- 洛谷P1190 接水问题
题目名称:接水问题 题目来源 [洛谷P1190] (https://www.luogu.org/problemnew/show/P1190) 题目描述 学校里有一个水房,水房里一共有\(m\)个龙头 ...
- 洛谷——P1190 接水问题
P1190 接水问题 题目描述 学校里有一个水房,水房里一共装有 m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为 1. 现在有 n 名同学准备接水,他们的初始接水顺序已经确定.将这些同学 ...
- 洛谷—— P1190 接水问题
https://www.luogu.org/problem/show?pid=1190#sub 题目描述 学校里有一个水房,水房里一共装有 m 个龙头可供同学们打开水,每个龙头每秒钟的 供水量相等,均 ...
- 洛谷P1783 海滩防御 分析+题解代码
洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...
- 洛谷P4047 [JSOI2010]部落划分题解
洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...
- 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)
洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...
- BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解
+++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...
- 洛谷10月月赛II题解
[咻咻咻] (https://www.luogu.org/contestnew/show/11616) 令人窒息的洛谷月赛,即将参加NOIp的我竟然只会一道题(也可以说一道也不会),最终145的我只能 ...
- [洛谷P1823]音乐会的等待 题解(单调栈)
[洛谷P1823]音乐会的等待 Description N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没 ...
随机推荐
- git 学习笔记 ---远程仓库
Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上.怎么分布呢?最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以“克隆”这个原始版本库,而且每台机器的版本库其实都是一样的, ...
- The three day 给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本
""" 给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本. 所谓无效化 IP 地址,其实就是用 "[.]" 代替了每个 ...
- 监听EF执行的sql语句及状态
1.监听EF执行sql的方式 db.Database.Log += c => Console.WriteLine($"sql:{c}"); SQL Server Profil ...
- 广州CBC2019
CBC2019-day1 25 August 2019 on 学术前沿huyujia 8月24日上午,CBC2019正式开幕.主持人首先对大会情况以及与会嘉宾做了简要介绍:紧接着,校领导.大会主席以及 ...
- BUAA OO 2019 第四单元作业总结
目录 第四单元总结 总 UML UML 类图 UML 时序图 UML 状态图 架构设计 第十三次作业 第十四次作业 课程总结 历次作业总结 架构设计 面向对象方法理解 测试方法理解与实践 改进建议 尽 ...
- 第二章:jQuery初探
一.引入jQuery XXXX.js文件 <script>标签 1.版本选择 当前jQuery有两个分支 1.x 支持ie6.7.8 jquery-1.11.2.js:未经过压缩,适合同学 ...
- [LeetCode] 63. 不同路径 II ☆☆☆(动态规划)
描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 现在 ...
- 【转】Anaconda安装与使用
PS:这还是17年一次数据挖掘训练营使用的软件 [转至]https://blog.csdn.net/m0_37605642/article/details/98726766 安装和配置 1.在官网或清 ...
- SQL PLUS 远程连接数据库
-- SQL PLUS 远程连接Oracle数据库(WINDOWS+SQL PLUS)命令:用户名/密码@ip地址[:端口]/service_name [as sysdba] EG: ORCL/ORC ...
- Mongodb之简介
MongoDB是一个基于分布式存储的数据库,由C++语言编写,旨在为WEB应用提供的可扩展的高性能数据存储解决. MongoDB是介于关系型数据库与非关系型数据库之间的产品,也是非关系型数据库中功能最 ...