PAT1014 Waiting in Line (30)(模拟)

10 篇文章 0 订阅

这题思路倒是不难,比较容易想到是用queue进行模拟,主要是要想到对每个队列维护一个当前顾客进入的时间,我的模拟不咋样啊,这种题就感觉难度不小了。

#include<string>
#include<cstdlib>
#include<vector>
#include<stack>
#include<queue>
#include<utility>
#include<map>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<iostream>
#define INF 0x6fffffff
using namespace std;

int n, m, k, q;
queue<int> que[25];
int processTime[1050];
int leaveTime[1050];		//顾客离开的时间
int timeBase[25];		//每个窗口现在顾客进入的时间

int main() {
	cin >> n >> m >> k >> q;
	for (int i = 0; i < k; i++)
		cin >> processTime[i];

	int index;
	int pos = 0;										//目前在等待的顾客
	for (int i = 0; pos < m*n&&pos<k; pos++) {		//最开始顾客进入黄线
		que[i].push(pos);
		leaveTime[pos] = timeBase[i] + processTime[pos];
		timeBase[i] = leaveTime[pos];
		i = (i + 1) % n;
	}
	for (; pos < k; pos++) {
		int min_wait = INF;
		for (int j = 0; j < n; j++) {
			int cus = que[j].front();
			if (min_wait > leaveTime[cus]) {
				min_wait = leaveTime[cus];
				index = j;	
			}
		}
		que[index].pop();
		que[index].push(pos);
		leaveTime[pos] = timeBase[index] + processTime[pos];
		timeBase[index] = leaveTime[pos];
	}

	int qq;
	while (q--) {
		cin >> qq;
		qq--;
		if (leaveTime[qq] - processTime[qq] >= 60 * 9) {		//进入窗口时间不能大于等于17:00
			cout << "Sorry" << endl;
		}
		else {
			int hour = leaveTime[qq] / 60;
			int minute = leaveTime[qq]% 60;
			printf("%02d:%02d\n", 8 + hour, minute);
		}
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值