1017. Queueing at Bank (25)

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct node
{
	int arriving, processing;
};

int cmp(node n1, node n2)
{
	return n1.arriving < n2.arriving;
}

int main()
{
	int n, k;
	scanf("%d%d", &n, &k);

	int hour, minute, second, i;
	node nod;
	vector<node> v;

	for(i = 1; i <= n; i++)
	{
		scanf("%d:%d:%d %d", &hour, &minute, &second, &nod.processing);

		if(nod.processing > 60)
		{
			nod.processing = 60;
		}
		nod.processing *= 60;

		nod.arriving = hour * 3600 + minute * 60 + second;
		if(nod.arriving <= 17 * 3600)
		{
			v.push_back(nod);
		}
	}

	int former[110];
	for(i = 1; i <= k; i++)
	{
		former[i] = 8 * 3600;
	}

	sort(v.begin(), v.end(), cmp);

	i = 0;
	int minindex, mintime, curtime, sum = 0, j, size = v.size();

	while(1)
	{
		if(i == size)
		{
			break;
		}

		mintime = 10000000;
		minindex = -1;

		for(j = 1; j <= k; j++)
		{
			if(former[j] < mintime)
			{
				mintime = former[j];
				minindex = j;
			}
		}

		nod = v[i];
		if(nod.arriving < former[minindex])
		{
			sum += former[minindex] - nod.arriving;
			former[minindex] += nod.processing;
		}
		else
		{
			former[minindex] = nod.arriving + nod.processing;
		}
		i++;
	}

	
	double res = sum / (60.0 * size);

	printf("%.1lf\n", res);

	system("pause");
	return 0;
}

 

posted on 2025-11-23 16:56  王景迁  阅读(3)  评论(0)    收藏  举报

导航