1017 Queueing at Bank

第一遍刷PAT

题目意思

坑:
如果窗口时间超过下班时间,不做任何特殊处理(emmmmmm mmp)

我的憨憨程序

#include<iostream>
#include<queue>
#define CLOSE_TIME 17*60*60
using namespace std;

struct client{
	int h,m,s,pro_time;
	int arr_time;
	friend bool operator<(client a,client b)
	{
		return a.arr_time>b.arr_time;
	}
};

struct window{
	int id;
	int now_time;
	friend bool operator<(window a,window b)
	{
		return a.now_time>b.now_time;
	}
};

priority_queue<client> qc;
priority_queue<window> qw;

int main()
{
	int N,K;
	double ans=0.0,cnt=0.0;//浮点数还是初始化成0.0吧//浮点数还是用double吧 不然.5的好像不进位 
	client c;
	window w;
	scanf("%d%d",&N,&K);
	for(int i=0;i<N;i++)
	{
		scanf("%d:%d:%d %d",&c.h,&c.m,&c.s,&c.pro_time);
		c.arr_time=c.h*60*60+c.m*60+c.s;
		if(c.arr_time<=CLOSE_TIME) //某客户17点之后到的不给服务也不算进平均值, 17点可以 
			qc.push(c);
	}
	for(int i=0;i<K;i++)//初始化窗口时间
	{
		w.id=i;
		w.now_time=8*60*60;
		qw.push(w);
	}
	while(!qc.empty())
	{
		c=qc.top();//当前排第一的客户 
		qc.pop();
		w=qw.top();//最早空出来的窗口 
//		if(w.now_time>CLOSE_TIME)//有些人等到最后也没轮到 这个居然不算??? 
//		{
//			ans+=CLOSE_TIME-c.arr_time;
//			cnt+=1;
//			continue; 
//		}
		qw.pop();
		if(w.now_time>c.arr_time)//来了要等 
		{
			ans+=w.now_time-c.arr_time;
			//if(w.now_time<=CLOSE_TIME) //??这我就纳闷了 
				w.now_time+=c.pro_time*60;
		}
		else//来了不用等  bug点  
			w.now_time=c.pro_time*60+c.arr_time; 
		cnt+=1;	
		
		qw.push(w);
	}
	cnt*=60.0;
	if(cnt==0)
		printf("0.0\n");
	else
		printf("%.1f\n",ans/cnt);
	return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值