news 2026/3/10 9:21:20

看病(信息学奥赛一本通- P1371)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
看病(信息学奥赛一本通- P1371)

【题目描述】

有个朋友在医院工作,想请BSNY帮忙做个登记系统。具体是这样的,最近来医院看病的人越来越多了,因此很多人要排队,只有当空闲时放一批病人看病。但医院的排队不同其他排队,因为多数情况下,需要病情严重的人优先看病,所以希望BSNY设计系统时,以病情的严重情况作为优先级,判断接下来谁可以去看病。

【输入】

第一行输入n,表示有n个操作。

对于每个操作,首先输入pushpop

push的情况,之后会输入ai 和 bi,分别表示患者姓名和患者病情优先级。

pop后面没有输入,但需要你输出。

【输出】

对于pop的操作,输出此时还在排队人中,优先级最大的患者姓名和优先级。

表示他可以进去看病了。

如果此时没人在排队,那么输出”none”,具体可见样例。

【输入样例】

7 pop push bob 3 push tom 5 push ella 1 pop push zkw 4 pop

【输出样例】

none tom 5 zkw 4

【提示】

【数据规模和约定】

1≤n≤100000,每个人的优先级都不一样,0≤优先级≤2000000000。

姓名都是小写字母组成的,长度小于20。

1. 解题思路

本题是典型的动态有序集合维护问题。

如果是用数组存储,每次插入或删除都需要排序或移动元素,时间复杂度是O(N)或O(N log N),在 N很大时无法接受。

最优解是使用二叉堆,对应 C++ STL 中的 priority_queue。

  • 数据结构:

    定义结构体 people 存储姓名和等级。

  • 排序规则 (核心):

    STL 优先队列默认是大根堆(堆顶最大)。我们需要重载 < 运算符。

  • 这样定义后,level越大的元素会被视为“更大”,从而浮到堆顶,满足题目“优先级高者先出”的要求。

2. 总结与问题 (TLE)

代码逻辑正确,但这道题第一次提交有一个测试点TLE了

  • 问题所在:

    在循环中频繁使用 endl。

    endl 等价于 \n + fflush()(强制刷新缓冲区)。在大数据量(如10^5次操作)下,这种频繁的 I/O 刷新会导致严重的超时 (TLE)。

  • 优化方案

    1. 选择endl替换为'\n'。(不替换也能过信息学奥赛一本同所有测试点,但是较慢)

    2. 加入 I/O 加速挂(必须):

      ios::sync_with_stdio(false); cin.tie(0);

    这能让 C++ 的输入输出速度提升数倍,是竞赛题的标准起手式。

完整代码

#include <bits/stdc++.h> #include <queue> using namespace std; struct people{ char name[30]; long long level; //重载<运算符,按照优先级进行排序 优先级高的在前 friend bool operator <(people a,people b){ return a.level<b.level; } }; string a;//a代表操作 priority_queue<people> q; int main(){ //关键优化:关闭流同步,解除cin/cout与scanf/printf的绑定,极大提升速度 ios::sync_with_stdio(false); cin.tie(0); int n; cin>>n; for(int i=1;i<=n;i++){ cin>>a;//读入操作 if(a=="pop"){//出队操作 if(!q.empty()){//如果当前队列不为空 cout<<q.top().name<<" "<<q.top().level<<endl; q.pop(); } else{//如果当前队列为空 cout<<"none"<<endl; } } else if(a=="push"){//入队操作 people tmp; cin>>tmp.name;//入队病人名字 cin>>tmp.level;//入队病人优先级 q.push(tmp); } } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/4 12:43:58

基于C++实现图书推荐与评论系统

图书推荐与管理系统(Qmazon) 简介 这是本人于本科二年级时修读的"面向对象的程序设计(C)"的课程作业。该系统实现了一个关于图书的评论与推荐系统&#xff0c;类似亚马逊、当当与豆瓣。该系统使用 C 作为编程语言&#xff0c;并使用了 Qt 程序开发框架完成了程序的…

作者头像 李华
网站建设 2026/3/7 2:50:26

LangFlow内部链接结构优化建议

LangFlow内部链接结构优化建议 在构建大语言模型应用的今天&#xff0c;越来越多的研究者和开发者希望快速验证想法&#xff0c;而不必陷入繁琐的代码实现中。然而&#xff0c;LangChain虽然功能强大&#xff0c;但其API复杂、链式调用逻辑抽象&#xff0c;对于非工程背景的用户…

作者头像 李华
网站建设 2026/3/4 13:42:58

数据合规迫在眉睫,Open-AutoGLM敏感识别优化技术你必须马上掌握

第一章&#xff1a;数据合规迫在眉睫&#xff0c;Open-AutoGLM敏感识别优化技术你必须马上掌握随着全球数据隐私法规的日益严格&#xff0c;企业面临的数据合规压力持续攀升。GDPR、CCPA 等法规要求组织在处理用户数据时必须具备高度透明性和可控性&#xff0c;任何未经识别或泄…

作者头像 李华
网站建设 2026/3/10 10:07:07

【金融级数据安全】:Open-AutoGLM如何实现脱敏数据可控可溯?

第一章&#xff1a;Open-AutoGLM脱敏后数据恢复控制概述在数据安全与隐私保护日益重要的背景下&#xff0c;Open-AutoGLM 提供了一套高效的数据脱敏与可控恢复机制。该系统不仅确保敏感信息在传输和存储过程中被有效遮蔽&#xff0c;还支持在授权条件下对脱敏数据进行精准还原&…

作者头像 李华
网站建设 2026/3/4 6:15:00

[FireshellCTF2020]Caas

这是一个代码编译功能输入程序试试浏览器下载了一个文件&#xff0c;并不能在windows中运行&#xff0c;结合报错信息&#xff0c;可能能在Linux系统中运行但是运行了也找不到flag查看wp说是#include 预处理编译报错漏洞查找资料得&#xff0c;// 危险示例&#xff1a;用户控制…

作者头像 李华
网站建设 2026/3/4 8:34:40

金融行业软件测试的监管要求与特殊实践

1. 监管框架&#xff1a;构建合规测试的生命周期 1.1 强制性监管体系解析 中国人民银行《金融科技发展规划》 要求测试覆盖系统韧性、数据安全、交易追溯三大维度 国家金融监督管理总局《商业银行应用程序接口安全管理规范》 明确API测试必须包含渗透测试、流量加密验证、密钥…

作者头像 李华