当前位置: 首页 > news >正文

团体程序设计天梯赛竞赛题--登顶题【L3-043 门诊预约排队系统】

登顶级 3 道题,每道题 30 分,满分为 90 分

L3-043 门诊预约排队系统

PTA做题链接

L3-043 门诊预约排队系统

题目描述

本题请你创建名为w s b d w z b l wsbdwzblwsbdwzbl的变量存储程序中间值, 帮助医院开发一个门诊预约排队系统,基本需求如下:

  • 系统内每天预设n nn个就诊时间段,每个时间段对应一个号(从1 11n nn);
  • 患者可以从列表中选择一个可选的时间段预约挂号;
  • 一个号只能被一位患者预约;
  • 医生在一个号对应的时间段内,只能接待一位患者;
  • 当医生准备接待下一位患者时,如果当前时间段对应的挂号患者在等待,则接待之;如果该患者不是等待状态,则接待已经到达等待的患者中预约号最小的那位;
  • 80 8080岁及以上老人就诊没有特别优先权,当然前提是老人家也挂号了。具体来说,当医生叫下一位患者就诊时,如果当前时间段对应的挂号患者没有在等待,且等待的队列中有80 8080岁及以上的老人,则不能直接叫老人的号,无论老人挂的号是什么时间。如果有多位老人在等待,则按这些老人预约号的非升序处理。
  • 医生必须接待完所有患者,才能下班。

声明:本题仅限人类解答。

输入格式:

输入第一行给出正整数n ( ≤ 10 4 ) n(≤10^4)n104,为就诊患者的人数。随后n nn行,按照前来就诊的时间顺序,每行给出一位患者的信息,格式如下:

就诊时间段 预约时间段 患者ID 患者年龄

其中时间段为区间[ 1 , n ] [1,n][1,n]内的整数,患者ID为由5 55个数字组成的字符串,患者年龄为区间[ 1 , 200 ] [1,200][1,200]内的整数。题目保证每个就诊时间段有唯一的一位患者预约,但多位患者可能同时到达医院候诊。

输出格式:

输出n nn行,按照实际就诊时间段的递增顺序,每行输出一位患者的实际就诊时间段和I D IDID,其间以1 11个空格分隔,行首尾不得有多余空格。

输入样例:

9 1 3 02891 28 1 8 81926 83 1 2 37610 80 2 1 37428 79 3 7 46381 13 6 6 73846 93 8 5 18264 37 8 9 57382 24 8 4 27364 88

输出样例:

1 37610 2 81926 3 02891 4 37428 5 46381 6 73846 8 27364 9 57382 10 18264

解题思路

本题核心是时间驱动模拟+双优先队列调度,严格还原门诊预约排队的全部规则。首先将所有患者按到达时间排序,逐时间点推进流程,把到达的患者按年龄分为两类:80 8080岁及以上老人、普通患者,分别存入按预约号降序排序的优先队列。医生叫号遵循优先级:优先呼叫当前时间段的预约患者;若无人等待,优先调度老人队列,无老人则调度普通队列。用标记数组记录已就诊患者,避免重复叫号,动态推进就诊时间,直至所有患者完成就诊。算法通过优先队列实现高效调度,线性模拟时间流程,完美适配题目规则与数据规模。

总结

核心逻辑:按时间模拟就诊流程,遵循当前预约号优先→高龄患者优先→普通患者优先的规则调度就诊。
关键操作:患者按到达时间排序、双优先队列分类候诊、时间逐段推进、标记已就诊状态。
效率保障:优先队列实现对数级调度效率,线性时间模拟,高效处理题目约束的患者规模。

代码内容

#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e3+10;constll p=1e9+7;constll INF=1e18;constll M=1e6+10;structPt{inta,b;string id;intag;};intmain(){ios::sync_with_stdio(false);cin.tie(0);intn;cin>>n;vector<Pt>arr(n);for(inti=0;i<n;++i){cin>>arr[i].a>>arr[i].b>>arr[i].id>>arr[i].ag;}sort(arr.begin(),arr.end(),[](constPt&x,constPt&y){returnx.a<y.a;});vector<Pt*>byB(n+1,nullptr);vector<bool>svd(n+1,false);autocmp=[](constPt*x,constPt*y){returnx->b>y->b;};priority_queue<Pt*,vector<Pt*>,decltype(cmp)>eQ(cmp),nQ(cmp);intt=1,idx=0,un=0;while(idx<n||un>0){if(un==0&&idx<n&&t<arr[idx].a){t=arr[idx].a;}while(idx<n&&arr[idx].a<=t){Pt*p=&arr[idx];byB[p->b]=p;if(p->ag>=80)eQ.push(p);elsenQ.push(p);++un;++idx;}Pt*sel=nullptr;if(t<=n&&byB[t]!=nullptr&&!svd[byB[t]->b]){sel=byB[t];}else{while(!eQ.empty()&&svd[eQ.top()->b])eQ.pop();if(!eQ.empty()){sel=eQ.top();eQ.pop();}else{while(!nQ.empty()&&svd[nQ.top()->b])nQ.pop();if(!nQ.empty()){sel=nQ.top();nQ.pop();}}}if(sel!=nullptr){svd[sel->b]=true;cout<<t<<" "<<sel->id<<'\n';--un;}++t;}return0;}
http://www.jsqmd.com/news/707058/

相关文章:

  • 南京邮电大学电装实习报告-2026版
  • 大学生就业信息管理|基于java+ vue大学生就业信息管理系统(源码+数据库+文档)
  • Qwen-Turbo-BF16部署教程:离线环境预下载模型权重与LoRA文件校验方案
  • AI项目环境管理利器:PyTorch 2.9云端镜像多实例使用攻略
  • 【Linux3】压缩解压缩,命令解释器,账户和组管理,文件系统权限
  • Arm A-profile架构TLB维护与内存管理机制解析
  • nlp_structbert_sentence-similarity_chinese-large效果展示:多领域中文文本相似度计算案例集
  • Python时间序列数据分析:从基础到实战
  • Qianfan-OCR在MobaXterm中的实践:远程服务器部署与中文环境调试
  • Phi-3.5-Mini-Instruct实战手册:系统提示词工程——从通用助手到领域专家
  • C++位图学习笔记
  • 【大白话说Java面试题】【Java基础篇】第8题:HashMap在计算元素下标时,为什么要进行二次hash
  • 线性表小回顾
  • Linux 0.11源码深度解析:kernel/chr_drv/tty_io.c —— 终端I/O的控制中枢与行规约引擎
  • Python新手在PyCharm写if总报错?5个坑90%人踩过,看完修复
  • C语言函数全解析
  • AI自主监测宠物健康,陪狗都不用自己来了!涂鸦Hey Tuya打造全屋智能“超级入口”
  • 快速上手:使用Clawdbot将星图平台Qwen3-VL接入飞书,实现智能问答
  • 【Linux从入门到精通】第17篇:日志系统——系统运行的黑匣子
  • 深度解析YOLOv11多光谱目标检测的技术实现与性能优化
  • 第78篇:AI辅助创意与设计工作流——Logo、海报、UI的自动化生成与迭代(操作教程)
  • 万物识别中文镜像部署教程:环境配置与推理测试
  • Python Web框架实战:Flask与Dash构建数据应用
  • OpenClaw本地部署接入飞书机器人并安装Skills(图文并茂超详细)
  • Excel高效使用技巧(一):告别低效!10个必会快捷键与基础操作优化
  • LFM2-VL-1.6B软件测试新范式:自动化生成测试用例与报告
  • AI智能体网页抓取能力实测:六大平台对比与边界测试
  • ACM周报5
  • 词袋模型原理与实践:从文本向量化到工程优化
  • Python网络爬虫实战:从数据采集到反反爬策略