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

18105 银行的叫号顺序

### 详细分析

为了模拟银行的叫号过程,我们可以使用优先队列(堆)来管理客户的服务顺序。优先级越高的客户会先得到服务,同级别的客户按到达时间先后顺序得到服务。如果优先级和到达时间都相同,则按输入顺序服务。

### 思路

1. **优先队列**:使用优先队列来管理客户,优先级高的客户先服务,同级别的客户按到达时间先后顺序服务。如果优先级和到达时间都相同,则按输入顺序服务。
2. **模拟服务过程**:每5分钟服务一个客户,如果没有客户则等待5分钟。
3. **输入处理**:读取输入的客户信息,并按到达时间排序。

### 伪代码

```plaintext
function serve_customers(n, customers):
    priority_queue = empty priority queue
    current_time = 0
    customer_index = 0

    while customer_index < n or not priority_queue.empty():
        while customer_index < n and customers[customer_index].arrival_time <= current_time:
            priority_queue.push(customers[customer_index])
            customer_index += 1

        if not priority_queue.empty():
            customer = priority_queue.pop()
            print(customer.name)
        current_time += 5
```

### C++代码

#include <iostream>
#include <queue>
#include <vector>
#include <string>using namespace std;struct Customer {int arrival_time;int priority;string name;int index;bool operator<(const Customer& other) const {if (priority == other.priority) {if (arrival_time == other.arrival_time) {return index > other.index;}return arrival_time > other.arrival_time;}return priority < other.priority;}
};int main() {int n;scanf("%d", &n);vector<Customer> customers(n);for (int i = 0; i < n; ++i) {cin >> customers[i].arrival_time >> customers[i].priority >> customers[i].name;customers[i].index = i;}priority_queue<Customer> pq;int current_time = 0;int customer_index = 0;while (customer_index < n || !pq.empty()) {while (customer_index < n && customers[customer_index].arrival_time <= current_time) {pq.push(customers[customer_index]);customer_index++;}if (!pq.empty()) {Customer customer = pq.top();pq.pop();cout << customer.name << endl;}current_time += 5;}return 0;
}


 

相关文章:

  • QT事件机制理解
  • 深入探讨 ElementUI 动态渲染 el-table
  • 移植bash到openharmony
  • Django后端架构开发:Django 与 Celery 的深度集成
  • VirtualBox上的Oracle Linux虚拟机安装Docker全流程
  • Nginx服务器申请及配置免费SSL证书
  • RabbitMQ 消息可靠保障
  • 通过FileReader API获取上传音频的长度
  • 【Python系列】 并发编程在数据处理中的应用
  • 第二届海南大数据创新应用大赛 - 算法赛道冠军比赛攻略_海南新境界队
  • 设计模式22-迭代器模式
  • 【运维】深入理解 Linux 中的 `mv` 命令,使用 `mv` 移动所有文件但排除特定文件或文件夹
  • SQL Server数据库 创建表,和表的增删改查
  • 浮毛怎么去掉比较方便?最最高效解决办法宠物空气净化器分享
  • 【C++例题 / 训练】二分算法(模板 例题)
  • #Java异常处理
  • ES6简单总结(搭配简单的讲解和小案例)
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • jquery cookie
  • PAT A1092
  • php ci框架整合银盛支付
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • QQ浏览器x5内核的兼容性问题
  • tensorflow学习笔记3——MNIST应用篇
  • text-decoration与color属性
  • V4L2视频输入框架概述
  • Wamp集成环境 添加PHP的新版本
  • Web Storage相关
  • 初识MongoDB分片
  • 分布式任务队列Celery
  • 工程优化暨babel升级小记
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 模型微调
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 中文输入法与React文本输入框的问题与解决方案
  • Hibernate主键生成策略及选择
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #WEB前端(HTML属性)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)EOS中账户、钱包和密钥的关系
  • (转)编辑寄语:因为爱心,所以美丽
  • (状压dp)uva 10817 Headmaster's Headache
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net CoreRabbitMQ消息存储可靠机制
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)