7-48 银行排队问题之单窗口“夹塞”版 (30 分)(思路和详解+map做法)来呀Baby!
一:题目
排队“夹塞”是引起大家强烈不满的行为,但是这种现象时常存在。在银行的单窗口排队问题中,假设银行只有1个窗口提供服务,所有顾客按到达时间排成一条长龙。当窗口空闲时,下一位顾客即去该窗口处理事务。此时如果已知第i位顾客与排在后面的第j位顾客是好朋友,并且愿意替朋友办理事务的话,那么第i位顾客的事务处理时间就是自己的事务加朋友的事务所耗时间的总和。在这种情况下,顾客的等待时间就可能被影响。假设所有人到达银行时,若没有空窗口,都会请求排在最前面的朋友帮忙(包括正在窗口接受服务的朋友);当有不止一位朋友请求某位顾客帮忙时,该顾客会根据自己朋友请求的顺序来依次处理事务。试编写程序模拟这种现象,并计算顾客的平均等待时间。
输入格式:
输入的第一行是两个整数:1≤N≤10000,为顾客总数;0≤M≤100,为彼此不相交的朋友圈子个数。若M非0,则此后M行,每行先给出正整数2≤L≤100,代表该圈子里朋友的总数,随后给出该朋友圈里的L位朋友的名字。名字由3个大写英文字母组成,名字间用1个空格分隔。最后N行给出N位顾客的姓名、到达时间T和事务处理时间P(以分钟为单位),之间用1个空格分隔。简单起见,这里假设顾客信息是按照到达时间先后顺序给出的(有并列时间的按照给出顺序排队),并且假设每个事务最多占用窗口服务60分钟(如果超过则按60分钟计算)。
输出格式:
按顾客接受服务的顺序输出顾客名字,每个名字占1行。最后一行输出所有顾客的平均等待时间,保留到小数点后1位。
输入样例:
6 2
3 ANN BOB JOE
2 JIM ZOE
JIM 0 20
BOB 0 15
ANN 0 30
AMY 0 2
ZOE 1 61
JOE 3 10
输出样例:
JIM
ZOE
BOB
ANN
JOE
AMY
75.2
二:思路
首先在选择数据结构上,这个用到结构体,即一个下标可以表示多个变量(本题中的名字,和到达时间,事务办理时间,可惜我没想到呀),然后在处理朋友圈上,用到了map容器,即一个朋友圈内朋友有相同的编号;
还有要说的是,这个题中的是时间,要当成是时间轴上的数据(很重要,便于理解);
三:上码
#include<bits/stdc++.h>
using namespace std;struct Node{string name;int arrive;//到达时间int transaction;//事务办理时间
}node;int main(){int N,M;map<string,int>m;Node *stu = new Node[10020];int visited[10020] = {0};cin >> N >> M;for(int i = 1; i <= M; i++){int temp;cin >> temp;for(int j = 1; j <= temp; j++){string name;cin >> name;m[name] = i;}}for( int i = 1; i <= N; i++){cin >> stu[i].name >> stu[i].arrive >> stu[i].transaction;stu[i].transaction = stu[i].transaction > 60 ? 60:stu[i].transaction; }int manage = 0;//窗口的办理时间int total_wait = 0;//总共的等待时间for( int i = 1; i <= N; i++){if(visited[i] == 0){visited[i] = 1;//如果到达时间 大于窗口的事务办理时间 即可 直接进行办理事务 if(stu[i].arrive > manage){manage = stu[i].arrive + stu[i].transaction;//更新窗口的事务办理时间 }else{//窗口有人在办理事务,所以需要等待 total_wait += manage - stu[i].arrive;manage += stu[i].transaction;} cout << stu[i].name << endl;//判断后面是否有朋友for(int j = i + 1; j <= N; j++){//如果你的朋友在你的后面第一位,那么他就可以等你走后直接办理 if( stu[j].arrive > manage){break;}if(m[stu[i].name] == m[stu[j].name] && visited[j] == 0){visited[j] = 1;total_wait += manage - stu[j].arrive;manage += stu[j].transaction;cout << stu[j].name << endl; } } }} //cout << 1.0 * total_wait / N << endl;printf("%0.1f",1.0 * total_wait / N);}
加油陌生人!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7-48 银行排队问题之单窗口“夹塞”版 (30 分)(思路和详解+map做法)来呀Baby!相关推荐
- 7-2 银行排队问题之单窗口“夹塞”版 (30 分)
PTA 排队"夹塞"是引起大家强烈不满的行为,但是这种现象时常存在.在银行的单窗口排队问题中,假设银行只有1个窗口提供服务,所有顾客按到达时间排成一条长龙.当窗口空闲时,下一位顾客 ...
- 7-4 银行排队问题之单窗口“夹塞”版 (30 分) C语言版
排队"夹塞"是引起大家强烈不满的行为,但是这种现象时常存在.在银行的单窗口排队问题中,假设银行只有1个窗口提供服务,所有顾客按到达时间排成一条长龙.当窗口空闲时,下一位顾客即去该窗 ...
- 7-4 银行排队问题之单队列多窗口加VIP服务 (30 分)
7-4 银行排队问题之单队列多窗口加VIP服务 (30 分) 说实话这道题挺恶心 有意思的,大模拟,主要的思路就是模拟时间轴. 题目描述 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时 ...
- 7-3 银行排队问题之单队列多窗口服务 (25 分)
7-3 银行排队问题之单队列多窗口服务 (25 分) 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙.当有窗口空闲时,下一位顾客即去该窗口处理事务.当有多个窗口可 ...
- 7-46 银行排队问题之单队列多窗口服务 (10 分)
7-46 银行排队问题之单队列多窗口服务 (10 分) 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙.当有窗口空闲时,下一位顾客即去该窗口处理事务.当有多个窗口 ...
- 题353.2022暑期天梯赛训练-7-10 银行排队问题之单队列多窗口服务 (25 分)
文章目录 题353.2022暑期天梯赛训练-7-10 银行排队问题之单队列多窗口服务 (25 分) 题目: 输入格式: 输出格式: 输入样例: 输出样例: **思路** **代码** 题353.202 ...
- jQuery 表单验证插件,jQuery Validation Engine用法详解
jQuery 表单验证插件,jQuery Validation Engine用法详解 功能强大的 jQuery 表单验证插件,适用于日常的 E-mail.电话号码.网址等验证及 Ajax 验证,除自身 ...
- Java调用SMSLib用单口短信猫发送短信详解
技术园地 当前位置:短信猫网站主页 > 技术园地 > [转载]Java调用SMSLib用单口短信猫发送短信详解 发布时间:2017/02/09 点击量:620 SMSLib是Apache的 ...
- SpringBoot+STOMP 实现聊天室(单聊+多聊)及群发消息详解
上篇系列文章:springboot+websocket构建在线聊天室(群聊+单聊) 最近发现stomp协议来实现长连接,非常简单(springboot封装的比较好) 本系列文章: 1.springbo ...
最新文章
- 2014-5-14 我的战斗效果
- 避免延迟的JPA集合
- pointcut 排除_宁河天津玻璃门地弹簧玻璃门故障排除
- 太强了,300分钟撸一个基于redis的亿级用户高并发系统
- 揭开网络编程常见API的面纱【下】
- hive查询where join_Hive解析流程-抽象语法树生成
- 内核中断,异常,抢占总结篇
- 解决VsCode下载慢问题
- 局域网桌面共享软件(优化版)
- gg 修改器游戏被保护_2.游戏so防封的制作思路
- iOS 强制屏幕旋转
- 关于在页面提交后reset按钮就不起作用的问题
- OC 6702升压型恒流驱动芯片, ESOP8 封装,内置 100V 功率 MOS
- Java理论题(2)——简答题
- 小白学机器学习西瓜书-第三章对数几率回归
- 免费网站seo诊断:从哪些维度进行诊断呢?
- 下拉菜单html菜鸟教程,Bootstrap 下拉菜单
- 谈谈区块链:深入理解软硬分叉
- Vue 开发必须知道的 36 个技巧
- Linux进阶-FTP服务器源码搭建(pureftpd)