PAT (Advanced Level) 1014 Waiting in Line(模拟)

本文介绍了一种算法,用于解决多个窗口处理任务时,如何合理分配任务以避免工作时间超过五点的问题。通过使用队列和结构体,算法能够有效计算每个任务的完成时间,并判断是否会在五点后完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

唯一坑点:并不是五点后结束的就Sorry,而是五点后开始的输出Sorry,即五点前开始,但是拖到五点后也会完成。没看清题目,查了半小时没找出错。。。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
int n, m, k, q;
struct People{
	int ptime,otime;
}people[1005];
int main(){
	scanf("%d%d%d%d",&n,&m,&k,&q);
	queue<People> pq[20];
	for(int i = 0; i < k; i++){
		scanf("%d",&people[i].ptime);
	}
	for(int i = 0; i < k; i++){
		int mint = 1500, minq = 0, flag = 0, minsize = m+1, sizeq = 0;
		for(int j = 0; j < n; j++){
			if(pq[j].size() < m){
				if(minsize > pq[j].size()){
					minsize = pq[j].size();
					sizeq = j;
					flag = 1;
				}
			}
			else{
				if(mint > pq[j].front().otime){
					mint = pq[j].front().otime;
					minq = j;
				}
			}
		}
		if(flag == 0){
			pq[minq].pop();
			people[i].otime = pq[minq].back().otime+people[i].ptime;
			pq[minq].push(people[i]);
		}
		else{
			if(pq[sizeq].empty())
				people[i].otime = people[i].ptime;
			else
				people[i].otime = pq[sizeq].back().otime+people[i].ptime;
			pq[sizeq].push(people[i]);
		}
	}
	int qct;
	for(int i = 0; i < q; i++){
		scanf("%d",&qct);
		if(people[qct-1].otime-people[qct-1].ptime >= 540){
			printf("Sorry\n");
		}
		else{
			int h = people[qct-1].otime/60, m = people[qct-1].otime%60;
			printf("%02d:%02d\n",h+8,m);
		}
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值