【ETOJ P1036】我踏马吃吃吃吃吃 题解(优先队列+贪心算法)

题目描述

有n个人在m个窗口打饭,因为每个人的需求不同,所以每个人的“窗口占用时间”也不同。第i个人的窗口占用时间为 t i t_i ti

请问如何安排这些人到窗口打饭,可以使得所有人等待的时间之和最小?

输入格式

第一行两个整数n,m。 ( 1 ≤ n ≤ 2 × 1 0 5 , 1 ≤ m ≤ 2 × 1 0 5 ) (1 \leq n \leq 2 \times 10^5, 1 \leq m \leq 2 \times 10^5) (1n2×105,1m2×105)

接下来一行,n个整数表示 t i t_i ti ( 1 ≤ t i ≤ 1 0 9 ) (1 \leq t_i \leq 10^9) (1ti109)

输出格式

一个整数表示答案。

样例

输入1

5 3
3 2 1 5 7

输出1

3

解释: ( 1 , 5 ) , ( 2 , 7 ) , ( 3 ) (1,5),(2,7),(3) (1,5),(2,7),(3),这样安排可以使得每个人的等待时间之和最小,为3。


思路

这是一个最小延迟调度问题。目标是找到一种方法,将n个人分配到m个窗口,使得所有人的等待时间之和最小。每个人的窗口占用时间已知。

使用两个优先队列,pq1和pq2。pq1用于存储所有人的窗口占用时间,pq2用于存储每个窗口的总等待时间。首先,所有人的窗口占用时间被读入pq1,m个窗口的初始等待时间(都为0)被读入pq2。

在每一步,都选择将当前等待时间最短的窗口分配给下一个人。进入一个循环,直到所有人都被分配到窗口为止。在每一步,从pq1中取出一个人,从pq2中取出当前等待时间最短的窗口,将这个人分配到这个窗口上,然后更新这个窗口的总等待时间,并将其重新插入pq2。同时,这个窗口的等待时间被加入到总等待时间ans中。

当所有人都被分配到窗口后,总等待时间ans就是要求的答案。这个答案代表了所有人的等待时间之和的最小值。


AC代码

#include <algorithm>
#include <iostream>
#include <queue>
#define AUTHOR "HEX9CF"
#define ll long long
using namespace std;int n, m;
ll ans;
priority_queue<int, vector<int>, greater<int>> pq1, pq2;int main() {cin >> n >> m;for (int i = 1; i <= n; i++) {int t;cin >> t;pq1.push(t);}for (int i = 1; i <= m; i++) {pq2.push(0);}ans = 0;while (pq1.size()) {// cout << pq1.top() << " " << pq2.top() << endl;ans += pq2.top();pq2.push(pq2.top() + pq1.top());pq1.pop();pq2.pop();}cout << ans << endl;return 0;
}

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

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

相关文章

Linux 网络:PTP 简介

文章目录 1. 前言2. PTP(Precision Time Protocol​) IEEE 1588 协议简介2.1 PTP IEEE 1588 协议时间同步原理2.2 PTP IEEE 1588 协议时钟类型2.2.1 普通时钟(OC: Ordinary Clock)2.2.2 边界时钟(BC: Boundary Clock)2.2.3 透明时钟(TC: Transparent Clock)2.2.3.1 端对端透明时…

769933-15-5,Biotin aniline,用来标记和检测细胞膜上的特定蛋白质

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;769933-15-5&#xff0c;Biotin aniline&#xff0c;生物素苯胺 一、基本信息 产品简介&#xff1a;Biotin aniline, also known as Biotin aniline, is a molecular probe with strong reactivity. Its uniqueness…

SQLserver2008 r2 下载安装配置、使用、新建登录用户及通过Navicat远程连接

目录 一、下载 二、安装配置 1.安装 2.许可条款 3.安装程序支持文件 4.功能选择 5.实例配置 6.服务器配置 7.数据库引擎配置 8.Reporting Services 配置 9.安装进度 ​编辑 10.完成 三、使用 四、新建登录用户 1.新建登录名 2.常规 3.服务器角色 4. 用户映…

Unity3d Shader篇(三)— 片元半兰伯特着色器解析

文章目录 前言一、片元半兰伯特着色器是什么&#xff1f;1. 片元漫反射着色器的工作原理2. 片元半兰伯特着色器的优缺点优点&#xff1a;缺点&#xff1a; 3. 公式 二、使用步骤1. Shader 属性定义2. SubShader 设置3. 渲染 Pass4. 定义结构体和顶点着色器函数5. 片元着色器函数…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Radio组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Radio组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Radio组件 单选框&#xff0c;提供相应的用户交互选择项。 子组件 无。 接口 …

Java面向对象 构造器

目录 构造器实例分析 测试类Person01的构造器分析 构造器 Java中的构造器是一种特殊的方法&#xff0c;用于初始化新创建的对象。构造器与类同名&#xff0c;并且没有返回类型。它主要用于设置对象的初始状态&#xff0c;也可以用于执行一些必要的操作&#xff0c;例如分配资源…

大模型|基础_word2vec

文章目录 Word2Vec词袋模型CBOW Continuous Bag-of-WordsContinuous Skip-Gram存在的问题解决方案 其他技巧 Word2Vec 将词转化为向量后&#xff0c;会发现king和queen的差别与man和woman的差别是类似的&#xff0c;而在几何空间上&#xff0c;这样的差别将会以平行的关系进行表…

读千脑智能笔记05_千脑智能理论

1. 现有的新皮质理论 1.1. 最普遍的看法是新皮质就像一个流程图 1.2. 特征层次理论 1.2.1. 该理论最大的弊端在于认为视觉是个静止的过程&#xff0c;就像拍一张照片一样&#xff0c;但事实并非如此 1.2.1.1. 眼睛每秒会快速转…

如何在Termux中使用Hexo结合内网穿透工具实现远程访问本地博客站点

文章目录 前言 1.安装 Hexo2.安装cpolar3.远程访问4.固定公网地址 前言 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并结合…

4.0 Zookeeper Java 客户端搭建

本教程使用的 IDE 为 IntelliJ IDEA&#xff0c;创建一个 maven 工程&#xff0c;命名为 zookeeper-demo&#xff0c;并且引入如下依赖&#xff0c;可以自行在maven中央仓库选择合适的版本&#xff0c;介绍原生 API 和 Curator 两种方式。 IntelliJ IDEA 相关介绍&#xff1a;…

axios封装取消请求的方式

问题:项目中涉及tab切换页,tab1和tab2列表数据字段相同,所以一般使用el-tabs组件;el-tabs中的每一项el-tab 是通过v-for遍历产生的,所有的每一项el-tab中的table表格数据使用的是一个tableData存储的;此时会有问题;我们点击tab1时发送请求获取数据保存在tableData中,点击tab2时…

leecode172 | 阶乘后的零 | 傻瓜GPT

题意 给定一个整数 n &#xff0c;返回 n! 结果中尾随零的数量。提示 n! n * (n - 1) * (n - 2) * ... * 3 * 2 * 1//题解 class Solution { public:int trailingZeroes(int n) { // ...*(1*5)*...*(x*5)*...*(1*5*5)*...*(x*5*5)*...*n 然后倒过来 //...∗(1∗5)∗...∗…