1017. Queueing at Bank (25)

题目要求:

时间限制
400 ms
内存限制
32000 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

Suppose a bank has K windows open for service. There is a yellow line in front of the windows which devides the waiting area into two parts. All the customers have to wait in line behind the yellow line, until it is his/her turn to be served and there is a window available. It is assumed that no window can be occupied by a single customer for more than 1 hour.

Now given the arriving time T and the processing time P of each customer, you are supposed to tell the average waiting time of all the customers.

Input Specification:

Each input file contains one test case. For each case, the first line contains 2 numbers: N (<=10000) - the total number of customers, and K (<=100) - the number of windows. Then N lines follow, each contains 2 times: HH:MM:SS - the arriving time, and P - the processing time in minutes of a customer. Here HH is in the range [00, 23], MM and SS are both in [00, 59]. It is assumed that no two customers arrives at the same time.

Notice that the bank opens from 08:00 to 17:00. Anyone arrives early will have to wait in line till 08:00, and anyone comes too late (at or after 17:00:01) will not be served nor counted into the average.

Output Specification:

For each test case, print in one line the average waiting time of all the customers, in minutes and accurate up to 1 decimal place.

Sample Input:
7 3
07:55:00 16
17:00:01 2
07:59:59 15
08:01:00 60
08:00:00 30
08:00:02 2
08:03:00 10
Sample Output:
8.2
分析:

这一题和之前那个队列的有点类似,恰好在写这个代码之前刚去银行办网银,当时银行4个窗口不过那效率真是呵呵。结果回来就碰到这个题了。。。。

首先这一题中客户的到来时间不是按顺序给的,所以在计算之前首先需要对arrive时间进行排序,按字典顺序就可以。然后就是给每个窗口一个变量保存当前窗口处理客户业务的时间。然后对于每个新的客户,找到处理业务时间最少的那个窗口(也就是第一个空下来的),然后将该窗口的处理时间减去该客户到达的时间,就是该客户的等待时间了。然后再将该客户的处理时间累加到该窗口的累计处理时间里去。

需要注意的一点就是如果几个客户的到达时间间隔很大,这样会导致中间窗口会空闲,结果下一位客户即便到达的时间比较晚也不用排队。所以此时窗口的累计时间不再是简单的加上该用户的业务处理时间,而是需要记录该用户的离开时间(到达时间加上业务处理时间)。

最后我想说的是我提交了好几次一直是WA,直到最后才发现是freopen函数没有注释掉。最让我无语的是这样还有两个case是正确的。。。。。。

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct _customer
{
	char arrive_time[12];
	int process_time;
}customer;

int cmp(const void *a,const void *b);
int find_min(int *w,int k);

int main(int argc,char* argv[])
{
	int i,n,k,hh,mm,ss,min,tmp;
	int win[101];
	int wait_time;
	customer c[10001];

	//freopen("input","r",stdin);

	scanf("%d%d",&n,&k);
 	for(i=0;i<n;i++)
		scanf("%s%d",c[i].arrive_time,&c[i].process_time);

	qsort(c,n,sizeof(customer),cmp);
	/*for(i=0;i<n;i++)
		printf("%s\n",c[i].arrive_time);*/

	for(i=0;i<k;i++)
		win[i] = 0;

	wait_time = 0;

	for(i=0;i<n;i++)
	{
		if(strcmp(c[i].arrive_time,"17:00:00") > 0)
			break;

		hh = (c[i].arrive_time[0]-'0')*10 + c[i].arrive_time[1]-'0';
		mm = (c[i].arrive_time[3]-'0')*10 + c[i].arrive_time[4]-'0';
		ss = (c[i].arrive_time[6]-'0')*10 + c[i].arrive_time[7]-'0';

		min = find_min(win,k);
		tmp = (hh-8)*3600 + mm*60 + ss;
		if(win[min]>=tmp){
			wait_time += (win[min] - tmp);
			//printf("wait: %d\n",wait_time);
			win[min] += c[i].process_time*60;
		}
		else
			win[min] = tmp + c[i].process_time*60;
	}

	if(i!=0)
		printf("%.1f\n",wait_time/(i*60.0));
	else
		printf("0.0\n");

	return 0;
}

int cmp(const void *a,const void *b)
{
	return strcmp( (*(customer *)a).arrive_time,(*(customer *)b).arrive_time);
}

int find_min(int *w,int k)
{
	int i,min;

	min = 0;

	for(i=0;i<k;i++)
	{
		if(w[i] < w[min])
			min = i;
	}
	
	return min;
}







Queueing theory is a mathematical study of waiting lines or queues that arise in various real-life scenarios, such as customer service, traffic congestion, hospital emergency rooms, and telecommunications networks. Basic queueing theory involves the following concepts: 1. Arrival Process: This is the process of customers arriving at the queue. The arrival process can be modeled using different distributions, such as Poisson or exponential. 2. Service Process: This is the process of serving customers in the queue. The service process can also be modeled using different distributions, such as Poisson or exponential. 3. Queue Length: This is the number of customers waiting in the queue at any given time. 4. Queue Occupancy: This is the proportion of time that the server is busy serving customers. 5. System Capacity: This is the maximum number of customers that the system can handle at any given time. 6. Utilization: This is the proportion of time that the server is busy serving customers compared to the total time. 7. Waiting Time: This is the time that a customer spends waiting in the queue before being served. 8. Service Time: This is the time that a customer spends being served by the server. 9. Queueing Models: There are different queueing models that can be used to analyze queueing systems, such as the M/M/1 model, M/M/c model, M/G/1 model, and M/D/1 model. 10. Performance Measures: Different performance measures can be used to evaluate queueing systems, such as average waiting time, average queue length, and system throughput.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值