习题5-16 医院设备利用(Use of Hospital Facilities,ACM/ICPC World Finals 1991,UVa212)

本文主要是介绍习题5-16 医院设备利用(Use of Hospital Facilities,ACM/ICPC World Finals 1991,UVa212),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原题链接:https://vjudge.net/problem/UVA-212
分类:<algorithm>
备注:中级模拟,输出格式
前言:输出格式懒得数的直接看下面代码,很清楚了,注意每组数据最后还要输出空行。这UVA的PDF让我们通过数dash来数空格我能理解,但是空行是多少肉眼看不出来啊,居然两个表之间只有一个空行,还不说明清楚,正式比赛也会这样吗?还有第二个表开头并不要一个空格,PDF显示的不一样啊,要是没uDebug和之前做过的人的经验真不知道怎么办。
还有,容我再吐槽一句,为什么刘老师您不是完全按照难度给题目排序呢,明明前面还有更难的。

代码如下:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 10 + 5;
const int maxm = 30 + 5;
const int maxp = 100 + 5;
int n, m, st, t1, t2, t3, k, alltime;
int op[maxn], use1[maxn], re[maxm], use2[maxm];
struct patient {char name[10];int ot, rt;int room, begin1, end1;int bed, begin2, end2;int id;
}p[maxp];
bool cmp1(const patient& p1, const patient& p2) {if (p1.end1 != p2.end1)return p1.end1 < p2.end1;return p1.room < p2.room;
}
bool cmp2(const patient& p1, const patient& p2) {return p1.id < p2.id;
}
void simulate() {for (int i = 0; i < k; i++) {int minop = 0;for (int j = 1; j < n; j++)if (op[j] < op[minop])minop = j;//找最早的开放时间p[i].room = minop + 1;p[i].begin1 = op[minop];p[i].end1 = op[minop] + p[i].ot;use1[minop] += p[i].ot;op[minop] = p[i].end1 + t2;//更新开放时间}sort(p, p + k, cmp1);int last = 0;for (int i = 0; i < k; i++) {for (int j = 0; j < m; j++) {if (re[j] <= p[i].end1) {p[i].bed = j + 1;p[i].begin2 = p[i].end1 + t1;p[i].end2 = p[i].begin2 + p[i].rt;use2[j] += p[i].rt;re[j] = p[i].end2 + t3;last = max(last, p[i].end2);break;}}}sort(p, p + k, cmp2);alltime = last - st;
}
int main(void) {int flag = 0;while (~scanf("%d %d %d %d %d %d %d", &n, &m, &st, &t1, &t2, &t3, &k)) {getchar();st = st * 60;for (int i = 0; i < n; i++)op[i] = st;for (int i = 0; i < m; i++)re[i] = st;memset(use1, 0, sizeof(use1));memset(use2, 0, sizeof(use2));for (int i = 0; i < k; i++) {scanf("%s", p[i].name);scanf("%d%d", &p[i].ot, &p[i].rt);getchar();p[i].id = i + 1;}puts(" Patient          Operating Room          Recovery Room");puts(" #  Name     Room#  Begin   End      Bed#  Begin    End");puts(" ------------------------------------------------------");simulate();for (int i = 0; i < k; i++) {int hour1 = p[i].begin1 / 60, minute1 = p[i].begin1 % 60; int hour2 = p[i].end1 / 60, minute2 = p[i].end1 % 60;int hour3 = p[i].begin2 / 60, minute3 = p[i].begin2 % 60;int hour4 = p[i].end2 / 60, minute4 = p[i].end2 % 60;printf("%2d  %-10s", p[i].id, p[i].name);printf("%2d   %2d:%02d   %2d:%02d    ", p[i].room, hour1, minute1, hour2, minute2);printf(" %2d   %2d:%02d   %2d:%02d\n", p[i].bed,  hour3, minute3, hour4, minute4);}printf("\n");puts("Facility Utilization");puts("Type  # Minutes  % Used");puts("-------------------------");for (int i = 0; i < n; i++)printf("Room %2d    %4d   %5.2lf\n", i + 1, use1[i], 100.0 * use1[i] / alltime);for (int i = 0; i < m; i++)printf("Bed  %2d    %4d   %5.2lf\n", i + 1, use2[i], 100.0 * use2[i] / alltime);putchar('\n');}return 0;
}

这篇关于习题5-16 医院设备利用(Use of Hospital Facilities,ACM/ICPC World Finals 1991,UVa212)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/899034

相关文章

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

【JavaScript】LeetCode:16-20

文章目录 16 无重复字符的最长字串17 找到字符串中所有字母异位词18 和为K的子数组19 滑动窗口最大值20 最小覆盖字串 16 无重复字符的最长字串 滑动窗口 + 哈希表这里用哈希集合Set()实现。左指针i,右指针j,从头遍历数组,若j指针指向的元素不在set中,则加入该元素,否则更新结果res,删除集合中i指针指向的元素,进入下一轮循环。 /*** @param

第六章习题11.输出以下图形

🌏个人博客:尹蓝锐的博客 希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~ 1、题目要求: 输出以下图形

16 子组件和父组件之间传值

划重点 子组件 / 父组件 定义组件中:props 的使用组件中:data 的使用(有 return 返回值) ; 区别:Vue中的data (没有返回值);组件方法中 emit 的使用:emit:英文原意是:触发、发射 的意思components :直接在Vue的方法中声明和绑定要使用的组件 小炒肉:温馨可口 <!DOCTYPE html><html lang="en"><head><

【C++ Primer Plus习题】12.2

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "String.h"using namespace std;int main(){String s1(" and I am a

react笔记 8-16 JSX语法 定义数据 数据绑定

1、jsx语法 和vue一样  只能有一个根标签 一行代码写法 return <div>hello world</div> 多行代码返回必须加括号 return (<div><div>hello world</div><div>aaaaaaa</div></div>) 2、定义数据 数据绑定 constructor(){super()this.state={na

c++习题30-求10000以内N的阶乘

目录 一,题目  二,思路 三,代码    一,题目  描述 求10000以内n的阶乘。 输入描述 只有一行输入,整数n(0≤n≤10000)。 输出描述 一行,即n!的值。 用例输入 1  4 用例输出 1  24   二,思路 n    n!           0    1 1    1*1=1 2    1*2=2 3    2*3=6 4