医院设备利用(Use of Hospital Facilities, ACM/ICPC World Finals 1991, UVa212)rust解法
医院里有n(n≤10)个手术室和m(m≤30)个恢复室。每个病人首先会被分配到一个手术室,手术后会被分配到一个恢复室。从任意手术室到任意恢复室的时间均为t1,准备一个手术室和恢复室的时间分别为t2和t3(一开始所有手术室和恢复室均准备好,只有接待完一个病人之后才需要为下一个病人准备)。
k名(k≤100)病人按照花名册顺序排队,T点钟准时开放手术室。每当有准备好的手术室时,队首病人进入其中编号最小的手术室。手术结束后,病人应立刻进入编号最小的恢复室。如果有多个病人同时结束手术,在编号较小的手术室做手术的病人优先进入编号较小的恢复室。输入保证病人无须排队等待恢复室。
输入n、m、T、t1、t2、t3、k和k名病人的名字、手术时间和恢复时间,模拟这个过程。
样例:
输入
5 12 07 5 15 10 16
Jones
28 140
Smith
120 200
Thompson
23 75
Albright
19 82
Poucher
133 209
Comer
74 101
Perry
93 188
Page
111 223
Roggio
69 122
Brigham
42 79
Nute
22 71
Young
38 140
Bush
26 121
Cates
120 248
Johnson
86 181
White
92 140
输出
Patient Operating Room Recovery Room# Name Room# Begin End Bed# Begin End------------------------------------------------------1 Jones 1 7:00 7:28 3 7:33 9:532 Smith 2 7:00 9:00 1 9:05 12:253 Thompson 3 7:00 7:23 2 7:28 8:434 Albright 4 7:00 7:19 1 7:24 8:465 Poucher 5 7:00 9:13 5 9:18 12:476 Comer 4 7:34 8:48 4 8:53 10:347 Perry 3 7:38 9:11 2 9:16 12:248 Page 1 7:43 9:34 6 9:39 13:229 Roggio 4 9:03 10:12 9 10:17 12:19
10 Brigham 2 9:15 9:57 8 10:02 11:21
11 Nute 3 9:26 9:48 7 9:53 11:04
12 Young 5 9:28 10:06 3 10:11 12:31
13 Bush 1 9:49 10:15 10 10:20 12:21
14 Cates 3 10:03 12:03 8 12:08 16:16
15 Johnson 2 10:12 11:38 4 11:43 14:44
16 White 5 10:21 11:53 7 11:58 14:18Facility Utilization
Type # Minutes % Used
-------------------------
Room 1 165 29.68
Room 2 248 44.60
Room 3 258 46.40
Room 4 162 29.14
Room 5 263 47.30
Bed 1 282 50.72
Bed 2 263 47.30
Bed 3 280 50.36
Bed 4 282 50.72
Bed 5 209 37.59
Bed 6 223 40.11
Bed 7 211 37.95
Bed 8 327 58.81
Bed 9 122 21.94
Bed 10 121 21.76
Bed 11 0 0.00
Bed 12 0 0.00
解法:
use std::{cmp::Ordering, collections::BinaryHeap, io};
#[derive(Debug)]
struct Patient {id: usize,name: String,operation_time: usize,recovery_time: usize,room_id: usize,room_begin_time: usize,room_end_time: usize,bed_id: usize,bed_begin_time: usize,bed_end_time: usize,
}
#[derive(Debug, PartialEq, Eq)]
struct Room {id: usize,start_available_time: usize,
}
impl Ord for Room {fn cmp(&self, other: &Self) -> std::cmp::Ordering {if self.start_available_time != other.start_available_time {if self.start_available_time < other.start_available_time {Ordering::Greater} else {Ordering::Less}} else if self.id < other.id {Ordering::Greater} else {Ordering::Less}}
}
impl PartialOrd for Room {fn partial_cmp(&self, other: &Self) -> Option<Ordering> {Some(self.cmp(other))}
}fn main() {let mut buf = String::new();io::stdin().read_line(&mut buf).unwrap();let v: Vec<usize> = buf.split_whitespace().map(|e| e.parse().unwrap()).collect();let n = v[0];let m = v[1];let start_time = v[2] * 60;let t1 = v[3];let t2 = v[4];let t3 = v[5];let k = v[6];let mut rooms = BinaryHeap::new();for i in 0..n {let room = Room {id: i + 1,start_available_time: start_time,};rooms.push(room);}let mut patients: Vec<Patient> = vec![];for i in 0..k {let mut buf = String::new();io::stdin().read_line(&mut buf).unwrap();let name = buf.trim().to_string();let mut buf = String::new();io::stdin().read_line(&mut buf).unwrap();let t: Vec<usize> = buf.split_whitespace().map(|e| e.parse().unwrap()).collect();let patient = Patient {id: i + 1,name: name,operation_time: t[0],recovery_time: t[1],room_id: 0,room_begin_time: 0,room_end_time: 0,bed_id: 0,bed_begin_time: 0,bed_end_time: 0,};patients.push(patient);}let mut room_used_time: Vec<usize> = vec![0; n];for patient in patients.iter_mut() {let aroom = rooms.pop().unwrap();patient.room_id = aroom.id;patient.room_begin_time = aroom.start_available_time;patient.room_end_time = patient.room_begin_time + patient.operation_time;rooms.push(Room {id: aroom.id,start_available_time: patient.room_end_time + t2,});room_used_time[aroom.id - 1] += patient.operation_time;}patients.sort_by(|a, b| {if a.room_end_time != b.room_end_time {if a.room_end_time < b.room_end_time {Ordering::Less} else {Ordering::Greater}} else {if a.room_id < b.room_id {Ordering::Less} else {Ordering::Greater}}});let mut beds: Vec<usize> = vec![start_time; m];let mut bed_used_time: Vec<usize> = vec![0; m];let mut final_time = start_time;for patient in patients.iter_mut() {for j in 0..m {if beds[j] <= patient.room_end_time {patient.bed_id = j + 1;patient.bed_begin_time = patient.room_end_time + t1;patient.bed_end_time = patient.bed_begin_time + patient.recovery_time;beds[j] = patient.bed_end_time + t3;bed_used_time[j] += patient.recovery_time;final_time = final_time.max(patient.bed_end_time);break;}}}patients.sort_by(|a, b| a.id.cmp(&b.id));println!(" Patient Operating Room Recovery Room");println!(" # Name Room# Begin End Bed# Begin End");println!(" ------------------------------------------------------");for i in patients.iter() {print!("{:2} {:<10}", i.id, i.name);print!("{:2} {:2}:{:02} {:2}:{:02}",i.room_id,i.room_begin_time / 60,i.room_begin_time % 60,i.room_end_time / 60,i.room_end_time % 60);println!(" {:2} {:2}:{:02} {:2}:{:02}",i.bed_id,i.bed_begin_time / 60,i.bed_begin_time % 60,i.bed_end_time / 60,i.bed_end_time % 60);}println!();println!("Facility Utilization");println!("Type # Minutes % Used");println!("-------------------------");let all_time = final_time - start_time;for i in 0..n {println!("Room {:2} {:4} {:5.2}",i + 1,room_used_time[i],100.0 * room_used_time[i] as f64 / all_time as f64);}for i in 0..m {println!("Bed {:2} {:4} {:5.2}",i + 1,bed_used_time[i],100.0 * bed_used_time[i] as f64 / all_time as f64);}
}
相关文章:
医院设备利用(Use of Hospital Facilities, ACM/ICPC World Finals 1991, UVa212)rust解法
医院里有n(n≤10)个手术室和m(m≤30)个恢复室。每个病人首先会被分配到一个手术室,手术后会被分配到一个恢复室。从任意手术室到任意恢复室的时间均为t1,准备一个手术室和恢复室的时间分别为t2和t3…...
解决github ping不通的问题(1024程序员节快乐!
1024程序员节快乐!(随便粘贴一个文档,参加活动 解决github ping不通的问题 域名解析(域名->IP):https://www.ipaddress.com/ Ubuntu平台 github经常ping不通或者访问缓慢,方法是更改host…...

QT基础 柱状图
目录 1.QBarSeries 2.QHorizontalBarSeries 3.QPercentBarSeries 4.QHorizontalPercentBarSeries 5.QStackedBarSeries 6.QHorizontalStackedBarSeries 从上图得知柱状的基类是QAbstractBarSeries,派生出来分别是柱状图的水平和垂直类,只是类型…...

微机原理与接口技术-第七章输入输出接口
文章目录 I/O接口概述I/O接口的典型结构基本功能 I/O端口的编址独立编址统一编址 输入输出指令I/O寻址方式I/O数据传输量I/O保护 16位DOS应用程序DOS平台的源程序框架DOS功能调用 无条件传送和查询传送无条件传送三态缓冲器锁存器接口电路 查询传送查询输入端口查询输出端口 中…...

YoloV8改进策略:独家原创,LSKA(大可分离核注意力)改进YoloV8,比Transformer更有效,包括论文翻译和实验结果
文章目录 摘要论文:《LSKA(大可分离核注意力):重新思考CNN大核注意力设计》1、简介2、相关工作3、方法4、实验5、消融研究6、与最先进方法的比较7、ViTs和CNNs的鲁棒性评估基准比较8、结论YoloV8官方结果改进一:测试结果摘要 本文给大家带来一种超大核注意力机制的改进方…...

7天易语言从入门到实战(一)
1.1易语言简介 易语言是一门有着伟大理想的语言。公司用的少,开发者也很少,并不影响国人对他的热情。曾经的多玩LOL,朗读女,都是陪伴再那个国产PC应用匮乏的时代。 2001年1月 吴涛研发了中国自主知识产权的的中文编程语言——易语…...

redis缓存问题
缓存击穿 缓存击穿是指某个热点数据存储在redis中,该数据在高并发的场景下,当该key过期时就会有大量的请求去查询数据库,对数据库的压力非常大,可能会导致数据库压垮。 解决方案 1.不为热点的key设置过期时间。 2.使用分布式锁…...
mysql创建自定义函数报错
mysql创建自定义函数报错:This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declarat… 这是我们开启了bin-log,我们就必须指定我们的函数是否是 1.DETERMINISTIC 不确定的 2.NO SQL没有sql语句,当然也不会修改数…...

Docker 的数据管理与网络通信以及Docker镜像的创建
目录 Docker的数据管理 1、数据卷 2、数据卷容器 3、端口映射 4、容器互联 二、Docker网络 1、Docker网络实现原理 2、Docker的网桥模式 1)Host 2)Container 3)none 4)bridge 5)自定义网络 3、创建自定义…...
linux系统查看bash的history
要输出最近的20条命令,可以使用history命令。在Bash终端中,输入以下命令即可获取最近的20条命令历史记录: history 20这将显示你最近执行的20条命令及其相应的行号。 要将最近的20条命令写入到一个名为 “command.txt” 的文本文件中&#…...

【T+】畅捷通T+增加会计科目提示执行超时已过期。
【问题描述】 在畅捷通T软件中, 增加会计科目的时候提示: 通过DataTable插入ext扩展表出错:执行超时已过期。 完成操作之前已超时或服务器未响应。 操作已被用户取消。 语句已终止。 【解决方法】 【方法一】 注销用户登录,回到软件登录界面…...

0基础学习VR全景平台篇第111篇:全景图拼接和编辑 - PTGui Pro教程
上课!全体起立~ 大家好,欢迎观看蛙色官方系列全景摄影课程! 前情回顾:上节,我们将源图像导入了PTGui,也设置好了各项参数。 下面我们就开始拼接全景图,并且在编辑器里进行一系列检查错位和设…...

Dynamics 365 使用ILMerge 合并CRM开发后的DLL
很久以前写过一篇博文,关于用ILMerge 命令合并DLL,当时时纯敲命令行的,现在有了更简单的方式,只需要在NuGet下载如下两个包 另外插件引用第三方dll的新方案Preview来了,不久的将来就不需要使用ILMerge了...

SpringBoot Web请求响应
目录 前言请求PostmanPostman使用 简单参数原始方式接收普通参数SpringBoot方式接收普通参数参数名不一致问题 实体参数简单实体参数复杂实体对象 数组集合参数数组参数集合参数 日期参数JSON参数路径参数 响应ResponseBody统一响应结果请求响应案例案例需求与准备工作案例实现…...

Jenkins CLI二次开发工具类
使用Jenkins CLI进行二次开发 使用背景 公司自研CI/DI平台,借助JenkinsSonarQube进行代码质量管理。对接版本 Jenkins版本为:Version 2.428 SonarQube版本为:Community EditionVersion 10.2.1 (build 78527)技术选型 Java对接Jenkins有第…...
2. 计算WPL
题目 Huffman编码是通信系统中常用的一种不等长编码,它的特点是:能够使编码之后的电文长度最短。 更多关于Huffman编码的内容参考教材第十章。 输入: 第一行为要编码的符号数量n 第二行~第n1行为每个符号出现的频率 输…...

筹备三年,自动驾驶L3标准将至,智驾产业链的关键一跃
作者|张祥威 编辑|德新 多位知情人士告诉HiEV,智能网联汽车准入试点通知,乐观预计将在一个月内发布。试点的推动,意味着国家层面的自动驾驶L3标准随之到来。 「L3标准内容大部分与主机厂相关,由工信部牵头,找了几家…...
【Python】Python使用Switch语句
这里写目录标题 1.使用字典(Dictionary)2.使用if-elif-else 1.使用字典(Dictionary) 在 Python 中,没有内置的 switch 语句,但可以使用其他方式来实现类似的功能。以下是两种常见的方法: 使用…...
一年一度的1024程序员节
前言 1024 程序员节是中国程序员的节日,于每年的 10 月 24 日庆祝。这个节日旨在纪念和表彰程序员对科技和社会发展所做的贡献。 1024 程序员节最早由中国互联网公司 CSDN(中国软件开发者网)发起,自然而然地成为了中国程序员社区…...
第十七章 数据库操作
数据库基础 和JDBC概论和常用类和接口就不过多的说了 直接来到 数据库的操作 一开始是在数据库中插入了四个类型 两个int 两个varchar类型 再分别插入 名字 序号 号码 性别 然后再在java中操作增删改查 这几个操作 全部代码如下 package 第十七章; import j…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...