有n个客户和k个窗口,给出n个客户的到达时间和需要的时长
有空闲的窗口就去办理,没有的话就需要等待,求客户的平均时长。
如果在8点前来的,就需要等到8点。
如果17点以后来的,则不会被服务,无需考虑。

按客户的到达时间排序
建立一个优先级队列,一开始放入k个窗口,初始结束时间为8*3600
然后for循环客户,每次从优先级队列中取出最早结束时间的窗口
如果客户比结束时间来的早,就需要等待
如果客户比结束时间来的晚,就无需等待
最后只要统计那些到达时间在17*3600之前的客户即可。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
const int maxn=;
int n,k;
struct Customer{
int arrive; //到达时间
int process; //服务时间
int start; //客户开始被服务的时间
int finish; //客户的结束时间
int wait; //客户的等待时间
bool operator<(const Customer tmp)const{
return arrive<tmp.arrive;
} }cus[maxn];
struct Window{
int finish_time;
bool operator<(const Window tmp)const{
return finish_time>tmp.finish_time;
}
};
int main()
{
int h,m,s,t;
scanf("%d %d",&n,&k);
for(int i=;i<n;i++){
scanf("%d:%d:%d %d",&h,&m,&s,&t);
cus[i].arrive=h*+m*+s;
if(t>)
t=; //样例中其实也没有超过60分钟的数据,题目说了是假设
cus[i].process=t*;
}
priority_queue<Window>q;
Window w;
for(int i=;i<k;i++){
w.finish_time=*;
q.push(w);
}
sort(cus,cus+n);
Window ww;
for(int i=;i<n;i++){
w=q.top();
q.pop();
if(cus[i].arrive<w.finish_time){
cus[i].wait=w.finish_time-cus[i].arrive;
cus[i].start=w.finish_time;
cus[i].finish=cus[i].start+cus[i].process;
ww.finish_time=cus[i].finish;
q.push(ww);
}
else{
cus[i].start=cus[i].arrive;
cus[i].wait=;
cus[i].finish=cus[i].start+cus[i].process;
ww.finish_time=cus[i].finish;
q.push(ww);
}
}
double sum=;
int cnt=;
for(int i=;i<n;i++){
/*
一开始和P1014搞混了,以为如果是17点之前还没被服务,就不考虑
后来发现题目中明确说了,是17点之后到的才不考虑
*/
if(cus[i].arrive<=*){
sum+=cus[i].wait;
cnt++;
}
}
if(cnt==)
printf("0.0\n"); //去掉这个也能AC,说明样例没有出现cnt为0的情况
else{
double minutes=sum/60.0/cnt;
printf("%.1lf\n",minutes);
} return ;
}

PAT甲题题解-1017. Queueing at Bank (25)-模拟的更多相关文章

  1. PAT甲题题解-1056. Mice and Rice (25)-模拟题

    有n个老鼠,第一行给出n个老鼠的重量,第二行给出他们的顺序.1.每一轮分成若干组,每组m个老鼠,不能整除的多余的作为最后一组.2.每组重量最大的进入下一轮.让你给出每只老鼠最后的排名.很简单,用两个数 ...

  2. PAT甲题题解-1012. The Best Rank (25)-排序水题

    排序,水题因为最后如果一个学生最好的排名有一样的,输出的课程有个优先级A>C>M>E那么按这个优先级顺序进行排序每次排序前先求当前课程的排名然后再与目前最好的排名比较.更新 至于查询 ...

  3. PAT甲题题解-1036. Boys vs Girls (25)-找最大最小,大水题

    题意:给出n个人的姓名.性别.ID.分数,让你找出其中哪个妹纸分数最高.哪个汉子分数最低.以及他们的差如果没有妹纸或者汉子,则对应输出Absent,差用NA代替. 就是for一遍找最大最小值,水题 # ...

  4. PAT甲题题解-1062. Talent and Virtue (25)-排序水题

    水题,分组排序即可. #include <iostream> #include <cstdio> #include <algorithm> #include < ...

  5. PAT甲题题解-1074. Reversing Linked List (25)-求反向链表

    题意说的很清楚了,这种题的话,做的时候最好就是在纸上自己亲手模拟一下,清楚一下各个指针的情况, 这样写的时候就很清楚各个指针变量保存的是什么值. PS:一次AC哈哈,所以说自己动手在纸上画画还是很有好 ...

  6. PAT甲题题解-1125. Chain the Ropes (25)-贪心水题

    贪心水题,每次取最短的两个绳子合并,长度缩减成一半 #include <iostream> #include <cstdio> #include <algorithm&g ...

  7. PAT甲题题解-1007. Maximum Subsequence Sum (25)-求最大子区间和

    题意:给出n个数,求最大连续的子区间和,并且输出该区间的第一个和最后一个数. 如果所有数都小于0,那么则输出0,第一个数和最后一个数. 看数据k的范围,就知道肯定不能两层for循环来求区间和,O(n^ ...

  8. PAT甲题题解-1009. Product of Polynomials (25)-多项式相乘

    多项式相乘 注意相乘结果的多项式要开两倍的大小!!! #include <iostream> #include <cstdio> #include <algorithm& ...

  9. PAT甲题题解-1013. Battle Over Cities (25)-求联通分支个数

    题目就是求联通分支个数删除一个点,剩下联通分支个数为cnt,那么需要建立cnt-1边才能把这cnt个联通分支个数求出来怎么求联通分支个数呢可以用并查集,但并查集的话复杂度是O(m*logn*k)我这里 ...

随机推荐

  1. MySQL基础之 存储引擎

    MyISAM存储引擎 缺点:不支持事务,不支持外键.只支持表级锁. 优点:访问速度快,多用于select.insert语句的高负载操作.仅仅支持全文索引. MyISAM缓存在内存的是索引,不是数据.而 ...

  2. C++中const和指针

    常见的理解问题: const char * * s;//表示s是指向const char * 类型的指针: char * * const s;//表示s是指向char * 类型的一个常量指针.

  3. 13.5.SolrCloud集群使用手册之数据导入

    转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.使用curl命令方式 SolrCloud时会根据路由规则路由到各个shard. 删除所有数据 curl h ...

  4. OpenCV——Brisk特征检测、匹配与对象查找

    检测并绘制特征点: #include <opencv2/opencv.hpp> #include <opencv2/xfeatures2d.hpp> #include < ...

  5. JS图片灯箱(lightBox)效果基本原理和demo

    到年底了,项目不怎么忙,所以有空特地研究了下KISSY中源码JS灯箱效果,感觉代码比较简单,所以就按照他们的思路依赖于Jquery框架也封装了一个,特地分享给大家,以前经常看到网上很多这样的插件,感觉 ...

  6. Windows10 + eclipse + JDK1.8 + Apache Maven 3.6.0 + dl4j深度学习环境配置

    Windows10 + eclipse + JDK1.8 + Apache Maven 3.6.0 + dl4j深度学习环境配置 JDK下载安装请自行,并设置好环境变量1 查看Java版本C:\Use ...

  7. Xcode 备忘

    一. 打印一堆乱七八糟的东西: Edit Scheme... --> Run --> Arguments,在 Environment Variables 里添加 OS_ACTIVITY_M ...

  8. linux 文件夹和文件操作

    1.统计目录有多少个文件数 find ./company -type f | wc -l 2.删除文件夹中的文件 rm -f * #最经典的方法,删除当前目录下的所有类型的文件 rsync --del ...

  9. AI1.1-人工智能史

    来自:http://zh.wikipedia.org/wiki/人工智能史#CITEREFBerlinski2000 这篇是来自维基百科上面的人工智能史,将其大部分保留(真的是大部分,所以差不多没有原 ...

  10. 20155213免考项目——bof进阶及简易的HIDAttack

    20155213免考项目--bof进阶及简易的HIDAttack 目录 序 任务一:构造Shellcode(64位) 任务二:64位Shellcode的注入 任务三:32位及64位bof攻击(开启堆栈 ...