pat 1017 Queueing at Bank(23分)
来源:互联网 发布:mac无法播放网页视频 编辑:程序博客网 时间:2024/06/06 03:31
实质上是一个有截止时间的多任务调度问题,多个窗口,多个顾客,一个等待队列,截止时间为17点,算平均等待时间。思路是进行模拟,以i来模拟时间一秒一秒,每一秒都遍历所有窗口,若有窗口空闲且有顾客在等待,就服务。差一个点没过,不知是何种情况。需要考虑的情况有:
1. 全部都在17点以后到,这样结果为0.0
2.一个窗口服务完后,再遇到顾客,得服务
3.若顾客17点前到,但17点前无法得到服务,该顾客要不要算在等待的里面?
代码:
#include<iostream>#include<queue>#include<algorithm>using namespace std;const int NUM=10005;struct customer{int arrive;int process;}cust[NUM];int window[105],server[105];bool operator<(const customer &x, const customer &y){return x.arrive<y.arrive;}// int cmp(const customer &x, const customer &y)// {// return // }int main(){int n,k,i,j;int hh,mm,ss,begin,end;freopen("C:\\Documents and Settings\\Administrator\\桌面\\input.txt","r",stdin);cin>>n>>k;for(i=0;i<n;i++){cin>>hh;getchar();cin>>mm;getchar();cin>>ss;cin>>cust[i].process;cust[i].arrive=hh*3600+mm*60+ss;}begin=8*3600;end=17*3600;sort(cust,cust+n);double sum=0.0f;int index=0;for(j=0;j<k;j++){window[j]=begin;//每个窗口的空闲时间都是8点server[j]=0;//窗口都空闲}for(i=begin;i<=end;i++){//i来模拟每一秒的时间for(j=0;j<k;j++){//询问每个窗口if(window[j]==i&&i!=begin)server[j]=0;if(server[j]==0&&cust[index].arrive<=i&&index<n){//有窗口空闲且有顾客在等待window[j]=i+cust[index].process*60;//服务sum+=i-cust[index].arrive;//加上其等待时间//printf("%d\n",i-cust[index].arrive);index++;server[j]=1;//窗口设为忙}}if(index==n||cust[index].arrive>end)//顾客服务完了或顾客到达时间超过17点了break;}if(index>0){sum=sum/(60*index);printf("%.1lf",sum);} else {//所有顾客都17点后才来printf("0.0");}return 0;}
若要看AC代码,据说用优先队列特别简单,请参考:
http://linest.iteye.com/blog/1423588
- pat 1017 Queueing at Bank(23分)
- PAT 1017 Queueing at Bank (模拟)
- PAT 1017 Queueing at Bank
- 【PAT 1017】 Queueing at Bank 模拟算法
- PAT 1017. Queueing at Bank
- PAT 1017. Queueing at Bank
- PAT 1017. Queueing at Bank
- 【PAT】1017. Queueing at Bank
- Pat(Advanced Level)Practice--1017(Queueing at Bank)
- PAT (Advanced Level) Practise 1017 Queueing at Bank (25)
- PAT (Advanced Level) Practise 1017 Queueing at Bank (25)
- pat 1017. Queueing at Bank (模拟优先队列)
- PAT 1017. Queueing at Bank (25)(优先队列排队)
- PAT程序设计考题——甲级1017(Queueing at Bank ) C++实现
- pat 1017. Queueing at Bank (25)
- pat 1017. Queueing at Bank (25)
- 【PAT】1017. Queueing at Bank (25)
- PAT 1017. Queueing at Bank (25)
- WebKit的智能指针分析 - Part 1:RefCounted
- android中的runOnUiThread(runnable)
- Linux命令之hexdump - ”十六“进制查看器
- c++获取本机IP
- 深入理解ARM体系架构(S3C6410)---认识S3C6410
- pat 1017 Queueing at Bank(23分)
- 理解Node.js的异步非阻塞I/O模型
- sql server 修改IDENTITY 字段 的统计当前值
- 在Linux下安装JDK
- 重装系统后恢复wubi安装Ubuntu
- chapter 2.5: 内核模式编程基础
- 弹出div浮动登陆框 背景变灰
- 黑马程序员—学习小心知识整理
- ecryptfs 不支持cache=none