数据结构算法——1013. 医疗调度系统

题目

政府终于解决了全民医疗保健的问题!现在,无论贫富,每个人最终都能获得同等水平的医疗服务。

好哇!

有一个轻微的并发症。全国所有的医院都被压缩成一个地方,每次只能照顾一个人。

但别担心!此外,还制定了一个公平、高效的计算机系统,以确定谁将被服务。

你负责这个系统的编程。

这个国家的每个公民都将被分配一个唯一的数字,从1到P(这里的P是当前的人口)。它们将被放入一个队列,1在2前面,2在3前面,以此类推。医院将从这个队列中逐一处理病人。一旦市民被服务,他们会立即从队伍的前面移到后面。

当然,有时会出现紧急情况——如果你刚刚被一个蒸汽压路机碾过,你不能等到半个国家去做常规检查后再接受治疗!因此,对于这些(希望是罕见的)情况,可以使用一个快速命令将一个人移到队列的前面。其他国家的相对秩序将保持不变。

给定处理命令和快速命令的顺序,输出公民入院的顺序。
在这里插入图片描述
在这里插入图片描述

思路

思路一:
空间换时间
开一个队列链表减少插入删除操作用时
再开一个指针数组,指向对应数据的地址,减少查找用时
理论上用时最快,然而
在这里插入图片描述
光是开个1e9的数组就超256mb了,故pass

思路二:
从操作数只有1k个入手,所以我们最多只会N1000个数据,所以只开一个1000的数组和链表,倘若urgency的数据在1k里面,我们进行删除插入操作,不在1000里面,我们就开一个新的节点储存urgency来放到开头处(反正循环也不会再循环到这个数

代码

#include<iostream>
using namespace std;
typedef struct List
{
   
    int data;
    struct List* prev = NULL;
    struct List* next = NULL;
}list;


int main()
{
   
    int p,c;
    int a = 1;
    cin >> p >> c;
    while(p != 0 && c != 0)
    {
   
        cout << "Case " << a+&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值