您的位置:首页 > 产品设计 > UI/UE

PAT 甲级 1017. Queueing at Bank

2016-11-18 21:38 274 查看
最后一个例子没过

不过有巨巨发现我代码的bug,为什么最后一个例子没过,请联系我

#include<stdio.h>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
int change(int h,int m,int s){
return h*60*60+m*60+s;
}
struct Cus{
int time;
int p;
};
bool cmp(Cus a,Cus b){
return a.time<b.time;
}
Cus cus[10010];
int win[102]={0};//表示当前窗口所需要处理的时间
int main(){
int n,k;//n表示输入的人数,和银行开的窗口数
int early=8*60*60,late=17*60*60;//表示银行开门和关门的时间
scanf("%d %d",&n,&k);
int index=0;
for(int i=0;i<n;i++){
int h,m,s,p;
scanf("%d:%d:%d %d",&h,&m,&s,&p);
Cus temp;
temp.time=change(h,m,s);
if(temp.time>late) continue;
if(p>60) p=60;
temp.p=p;
cus[index++]=temp;
}
//index表示17:00前达到的人数
sort(cus,cus+index,cmp);
int total_time=0,total_cus=0;

int in=0;//in表示现在处理到几个人
queue<Cus> wait;//在黄线外等待的人
while(in<index&&cus[in].time<early){
//对银行开门前的顾客进行处理
total_time+=(early-cus[in].time);
wait.push(cus[in]);
in++;
}
for(int i=early;i<late;i++){
if(in<index&&i==cus[in].time) wait.push(cus[in++]);
for(int j=0;j<k;j++){
//对每个窗口进行处理
if(win[j]>0) win[j]--;
else{
if(wait.size()>0){
win[j]=wait.front().p*60;
wait.pop();
}
}
}
//如果K个窗口都处理结束,黄线外还有人
total_time+=wait.size();
}
printf("%0.1f",(float)total_time/60/index);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: