1014. Waiting in Line (30)

#include <iostream>
#include <queue>

using namespace std;

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

	int processing[1010], i, res[1010];
	for(i = 1; i <= k; i++)
	{
		scanf("%d", &processing[i]);
		res[i] = -1;
	}

	int former[30], flag[30];
	for(i = 1; i <= n; i++)
	{
		former[i] = 8 * 60;
		flag[i] = 1;
	}

	queue<int> que[30];
	int window = 1;

	for(i = 1; i <= k && i <= n * m; i++)
	{
		que[window++].push(i);
		if(window > n)
		{
			window = 1;
		}
	}

	int mintime, minindex, j, size, cur, curtime;
	while(1)
	{
		mintime = 10000000;
		minindex = -1;

		for(j = 1; j <= n; j++)
		{
			size = que[j].size();
			if(size > 0 && flag[j] == 1)
			{
				cur = que[j].front();
				curtime = former[j] + processing[cur];

				if(curtime < mintime)
				{
					mintime = curtime;
					minindex = j;
				}
			}
		}

		if(minindex == -1)
		{
			break;
		}

		cur = que[minindex].front();
		que[minindex].pop();

		former[minindex] = res[cur] = mintime;
		
		if(mintime >= 17 * 60)
		{
			flag[minindex] = 0;
		}
		else if(i <= k)
		{
			que[minindex].push(i++);
		}
	}

	int time, hour, minute;
	for(i = 1; i <= q; i++)
	{
		scanf("%d", &cur);

		time = res[cur];
		if(time == -1)
		{
			printf("Sorry\n");
		}
		else
		{
			hour = time / 60;
			minute = time % 60;

			printf("%02d:%02d\n", hour, minute);
		}
	}

	system("pause");
	return 0;
}

 

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

导航