7-46 银行排队问题之单队列多窗口服务 (10 分)

假设银行有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

结尾无空行

输出样例:

6.2 17 61
5 3 1

结尾无空行

###感谢浙江财经大学王瑞洲、周甄陶同学修正测试数据!

#include<iostream>
using namespace std;
const int N=1010,M=20;
struct ll{int t,p;//到达时间,处理时间
}q[N];
int main(){int l,r,n,k;cin>>n;l=r=0;队列头尾for(int i=0;i<n;i++){cin>>q[r].t>>q[r].p;if(q[r].p>60)q[r].p=60;r++;}cin>>k;int sumwait=0,lenwait=0,wait=0;//总的等待时间,最长等待时间,单次等待时间int sum[M]={0},winnum[M]={0};//完成时间,窗口人数while(l<r){int flag=0,minn=99999,imin=0;//标记变量,最快完成时间,最快完成时间下标for(int i=0;i<k;i++){if(sum[i]<=q[l].t){//如果队列首位,到达时间比完成时间大,就代表不需要等待sum[i]=q[l].t+q[l].p;winnum[i]++;flag=1;l++;break;}if(minn>sum[i]){//如果需要等待,就记录各个窗口里面最快完成的那个窗口的完成时间,下标minn=sum[i];imin=i;}}if(!flag){wait=minn-q[l].t;//等待的时间,最快完成的时间减去队列第一个人到达的时间+if(lenwait<wait)lenwait=wait;//更新对应窗口的完成时间sumwait+=wait;//求等待时间的和sum[imin]=minn+q[l].p;//对应窗口完成时间更新winnum[imin]++;//对应窗口人数++l++;//队列删除首位}}int last=0;for(int i=0;i<k;i++)if(last<sum[i])last=sum[i];printf("%.1lf %d %d\n",1.0*sumwait/n,lenwait,last);for(int i=0;i<k;i++){if(i!=0)cout<<' ';cout<<winnum[i];//输出各窗口人数}cout<<endl;return 0;
}
#include<iostream>
using namespace std;
const int N=1005,M=20;
struct ll{int t,p;
}q[N];
int main(){int l,r,n,k;cin>>n;l=r=0;for(int i=0;i<n;i++){cin>>q[r].t>>q[r].p;if(q[r].p>60)q[r].p=60;r++;}cin>>k;int sumwait=0,lenwait=0,wait=0;int sum[M]={0},winnum[M]={0};while(l<r){int flag=0,minn=99999,imin=0;for(int i=0;i<k;i++){if(sum[i]<=q[l].t){sum[i]=q[l].t+q[l].p;winnum[i]++;flag=1;l++;break;}if(minn>sum[i]){minn=sum[i];imin=i;}}if(!flag){wait=minn-q[l].t;if(lenwait<wait)lenwait=wait;sumwait+=wait;sum[imin]=minn+q[l].p;winnum[imin]++;l++;}}int last=0;for(int i=0;i<k;i++)if(last<sum[i])last=sum[i];printf("%.1lf %d %d\n",1.0*sumwait/n,lenwait,last);for(int i=0;i<k;i++){if(i!=0)cout<<' ';cout<<winnum[i];}cout<<endl;return 0;
}

7-46 银行排队问题之单队列多窗口服务 (10 分)相关推荐

  1. 7-3 银行排队问题之单队列多窗口服务 (25 分)

    7-3 银行排队问题之单队列多窗口服务 (25 分) 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙.当有窗口空闲时,下一位顾客即去该窗口处理事务.当有多个窗口可 ...

  2. 题353.2022暑期天梯赛训练-7-10 银行排队问题之单队列多窗口服务 (25 分)

    文章目录 题353.2022暑期天梯赛训练-7-10 银行排队问题之单队列多窗口服务 (25 分) 题目: 输入格式: 输出格式: 输入样例: 输出样例: **思路** **代码** 题353.202 ...

  3. 7-4 银行排队问题之单队列多窗口加VIP服务 (30 分)

    7-4 银行排队问题之单队列多窗口加VIP服务 (30 分) 说实话这道题挺恶心 有意思的,大模拟,主要的思路就是模拟时间轴. 题目描述 假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时 ...

  4. 6-1 带头结点的单链表就地逆置 (10 分)

    6-1 带头结点的单链表就地逆置 (10 分) 本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数.L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要 ...

  5. 7-48 银行排队问题之单窗口“夹塞”版 (30 分)(思路和详解+map做法)来呀Baby!

    一:题目 排队"夹塞"是引起大家强烈不满的行为,但是这种现象时常存在.在银行的单窗口排队问题中,假设银行只有1个窗口提供服务,所有顾客按到达时间排成一条长龙.当窗口空闲时,下一位顾 ...

  6. 7-2 银行排队问题之单窗口“夹塞”版 (30 分)

    PTA 排队"夹塞"是引起大家强烈不满的行为,但是这种现象时常存在.在银行的单窗口排队问题中,假设银行只有1个窗口提供服务,所有顾客按到达时间排成一条长龙.当窗口空闲时,下一位顾客 ...

  7. 7-4 银行排队问题之单窗口“夹塞”版 (30 分) C语言版

    排队"夹塞"是引起大家强烈不满的行为,但是这种现象时常存在.在银行的单窗口排队问题中,假设银行只有1个窗口提供服务,所有顾客按到达时间排成一条长龙.当窗口空闲时,下一位顾客即去该窗 ...

  8. 小孩报数(顺序循环队列版) (10 分)

    有若干个小孩围成一圈,现从指定的第1个开始报数,报到第 w个时,该小孩出列,然后从下一个小孩开始报数,仍是报到w个出列,如此重复下去,直到所有的小孩都出列(总人数不足w个时将循环报数),求小孩出列的顺 ...

  9. 银行排队问题--事件链表+多窗口队列(数据结构课本)

    银行排队问题 事件驱动模拟问题 问题分析: ​ 银行开放了4个窗口,现在客户要从四面八方到银行办理业务:根据常识,到银行就少不了排队.我们排队按最短队伍排列,中途不切换队伍. ​ 现在随机生成到银行办 ...

最新文章

  1. centos系统查看资源使用情况的工具
  2. 什么是方向图乘积定理_初中数学竞赛试题——正多边形与托勒密定理
  3. 第三次学JAVA再学不好就吃翔(part49)--String类的获取功能
  4. STL中的set/map
  5. Swift中文教程(二十一) 协议
  6. Python使用nmap进行端口扫描
  7. 物联网卡得持续增长对企业带来怎样的挑战
  8. python爬取去哪网数据_Python爬虫入门:使用Python爬取网络数据
  9. ENVI监督分类图像分割
  10. java中求数组中最大值
  11. 如何将各种电子书格式转换为PDF格式
  12. Creo 9.0安装教程
  13. java实现随机点名器
  14. 计算机应用技术高数学几本书,高一下学期数学学必修几 学哪几本书
  15. Java 爬虫微信公众号详情,并且破解微信图片跨域问题
  16. 使用do…while循环语句计算正数5的阶乘
  17. Linux·启动脚本·启动流程
  18. 迅雷看看播放器4.9.15.2156 如何观看超过5分钟以上的视频?
  19. 2021年安全员-C证考试题库及安全员-C证免费试题
  20. Java工作笔记/Java面试题/Java八股文/Java常用API

热门文章

  1. linux 文件指针,Linux中文件描述符fd与文件指针FILE*互相转换实例解析
  2. 开源中国android代码是什么,开源中国 OsChina Android 客户端源码分析(1)启动界面 app_start...
  3. jQuery length和size()区别
  4. Holer实现外网访问本地MySQL数据库
  5. 浅谈tomcat的配置及数据库连接池的配置
  6. SharePoint 2010多语言UI,以及开发人员需要注意的
  7. [转载] 华中科技大学期刊分类办法
  8. asp.net源码收集
  9. 安卓开发——锁定软件——输入密码后重复弹出输入密码窗口的解决方法
  10. C++中XML的读写操作(生成XML 解析XML)