7-3 银行排队问题之单队列多窗口服务 (25 分)
7-3 银行排队问题之单队列多窗口服务 (25 分)
假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙。当有窗口空闲时,下一位顾客即去该窗口处理事务。当有多个窗口可选择时,假设顾客总是选择编号最小的窗口。
本题要求输出前来等待服务的N位顾客的平均等待时间、最长等待时间、最后完成时间,并且统计每个窗口服务了多少名顾客。
输入格式:
输入第1行给出正整数N(≤1000),为顾客总人数;随后N行,每行给出一位顾客的到达时间T和事务处理时间P,并且假设输入数据已经按到达时间先后排好了顺序;最后一行给出正整数K(≤10),为开设的营业窗口数。这里假设每位顾客事务被处理的最长时间为60分钟。
输出格式:
在第一行中输出平均等待时间(输出到小数点后1位)、最长等待时间、最后完成时间,之间用1个空格分隔,行末不能有多余空格。
在第二行中按编号递增顺序输出每个窗口服务了多少名顾客,数字之间用1个空格分隔,行末不能有多余空格。
输入
9
0 20
1 15
1 61
2 10
10 5
10 3
30 18
31 25
31 2
3
题目分析: 错了几次,纯粹的模拟,注意客人到窗口的时间和窗口开放时间的关系即可,若客人比所有窗口的开放时间都小,客人就会进最小的那个,到来时间只要比最小大,从左到右遍历,第一个进去即可。
你也可以这样想,假如我早早的来到黄线等候,那么我肯定是等到最近一个available的窗口,假如我来的比较晚,那么我肯定是从左向右,那个available就去那个。
代码
>#include <bits/stdc++.h>
using namespace std;
struct consumer
{int arr; //arriveint pro; //processint wait;
}a[1001];
struct gate
{int stt=0; //start timeint n=0;
}b[11],ss[11];
bool cmp(struct consumer x,struct consumer y)
{return x.wait>y.wait;
}
bool cmmp(struct gate x,struct gate y)
{return x.stt>y.stt;
}
int main()
{int n,ar,pr;double waitsum=0;cin>>n;for (int i=0;i<n;i++){cin>>ar>>pr;if (pr>60) pr=60;a[i].arr=ar;a[i].pro=pr;}int k,count=0;cin>>k;while (count<n){ //到的时间比所有窗口的stt都晚,就进入第一个窗口,否则进入第一个stt最小的窗口.
// for (int i=0;i<k;i++)
// {
// printf("%d的开始时间是%d\n\n",i,b[i].stt);
// }int t=0;for (int i=1;i<k;i++){if (b[i].stt<b[t].stt){t=i;}}if (a[count].arr<=b[t].stt){b[t].n++;a[count].wait=b[t].stt-a[count].arr;waitsum+=a[count].wait;b[t].stt+=a[count].pro;count++;}else if (a[count].arr>b[t].stt){int appr;for (int i=0;i<k;i++){if (a[count].arr>=b[i].stt){appr=i;break;}}b[appr].n++;a[count].wait=0;b[appr].stt=a[count].arr+a[count].pro;count++;}}int sss=0;for (int i=0;i<k;i++){ss[sss++].n=b[i].n;}sort(a,a+count,cmp);sort(b,b+k,cmmp);printf("%.1lf %d %d",waitsum/n,a[0].wait,b[0].stt);printf("\n");printf("%d",ss[0].n);for (int i=1;i<k;i++){printf(" %d",ss[i].n);}
}
7-3 银行排队问题之单队列多窗口服务 (25 分)相关推荐
- 题353.2022暑期天梯赛训练-7-10 银行排队问题之单队列多窗口服务 (25 分)
文章目录 题353.2022暑期天梯赛训练-7-10 银行排队问题之单队列多窗口服务 (25 分) 题目: 输入格式: 输出格式: 输入样例: 输出样例: **思路** **代码** 题353.202 ...
- 7-46 银行排队问题之单队列多窗口服务 (10 分)
7-46 银行排队问题之单队列多窗口服务 (10 分) 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙.当有窗口空闲时,下一位顾客即去该窗口处理事务.当有多个窗口 ...
- 7-4 银行排队问题之单队列多窗口加VIP服务 (30 分)
7-4 银行排队问题之单队列多窗口加VIP服务 (30 分) 说实话这道题挺恶心 有意思的,大模拟,主要的思路就是模拟时间轴. 题目描述 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时 ...
- PTA: 7-2 银行业务队列简单模拟 (25 分)
大一下半期数据结构 数据结构题目集 7-2 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客 ...
- 7-48 银行排队问题之单窗口“夹塞”版 (30 分)(思路和详解+map做法)来呀Baby!
一:题目 排队"夹塞"是引起大家强烈不满的行为,但是这种现象时常存在.在银行的单窗口排队问题中,假设银行只有1个窗口提供服务,所有顾客按到达时间排成一条长龙.当窗口空闲时,下一位顾 ...
- 7-2 银行排队问题之单窗口“夹塞”版 (30 分)
PTA 排队"夹塞"是引起大家强烈不满的行为,但是这种现象时常存在.在银行的单窗口排队问题中,假设银行只有1个窗口提供服务,所有顾客按到达时间排成一条长龙.当窗口空闲时,下一位顾客 ...
- 7-4 银行排队问题之单窗口“夹塞”版 (30 分) C语言版
排队"夹塞"是引起大家强烈不满的行为,但是这种现象时常存在.在银行的单窗口排队问题中,假设银行只有1个窗口提供服务,所有顾客按到达时间排成一条长龙.当窗口空闲时,下一位顾客即去该窗 ...
- 7-1 银行业务队列简单模拟 (25 分)
题目: 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达银行的顾客序列,请按业务完成的顺序输出 ...
- 银行排队问题--事件链表+多窗口队列(数据结构课本)
银行排队问题 事件驱动模拟问题 问题分析: 银行开放了4个窗口,现在客户要从四面八方到银行办理业务:根据常识,到银行就少不了排队.我们排队按最短队伍排列,中途不切换队伍. 现在随机生成到银行办 ...
最新文章
- java通过使用ffmpeg获取视频的码率
- 2016全球数据新闻奖(DJA)颁布, 12个获奖作品全剖析
- LiveVideoStack线上分享第四季(十二):实时音视频抗丢包的实践
- 前端学习(2008)vue之电商管理系统电商系统之获取静态属性列表
- ANTLR 4(一)Getting Started
- 松下抛却Jungle掌机研发项目
- fasterrcnn论文_【论文解读】Yolo三部曲解读——Yolov1
- 班级管理系统(SSM+LayUI)
- VMware虚拟机下载、安装与使用
- Origin 2022安装教程(附下载链接)
- matlab期货,Matlab在股指期货中的应用
- ln软链接调试mininet
- 离职前一定要做好这7件事情,少一件都很麻烦。
- 下载FATSQ,读取10条序列并计算每条序列的长度和GC含量
- eap wifi 证书_如何以编程方式在Android中安装CA证书(用于EAP WiFi配置)?
- 06-手机登录token生成容联云短信验证用户认证和网关整合(网关做统一权限认证)
- Unity实战(1):Unity点击按钮,打印按钮文字内容
- zigzag convert
- Linux中的nl命令
- 中央气象局天气预报接口城市代码大全
热门文章
- LeetCode 1123. 最深叶节点的最近公共祖先(递归比较子树高度)
- LeetCode 376. 摆动序列(贪心 动态规划)
- andriod studio 运行 无结果_无负压静音供水设备下篇一
- tar linux 举例,linux 的tar 命令详解举例
- 大数据应用项目创新大赛_全国高校大数据应用创新大赛
- python去重复元素_Python实现去除列表中重复元素的方法总结【7种方法】
- php中写salt,请快速检查这个PHP+SALT实现-不工作?
- Python算法题----在列表中找到和为s的两个数字
- PAT乙类1013 数素数 (20 分)
- 五个同事想计算他们的平均工资,但公司不让吐露薪资,如何实现?