PAT(甲级)1014

#include<bits/stdc++.h>
#define lowbit(x) ((x)&(-(x)))
#define ll long long
#define INF 0x3f3f3f3f
#define CLR(a) memset(a, 0, sizeof(a))
using namespace std;
struct node{
	int poptime,endtime;
	queue<int> q;
};
int N,M,K,Q;
int main() {
	int index=1;
	cin>>N>>M>>K>>Q;
	vector<bool> service(K+1,false);//记录是否能被服务
	vector<int> result(K+1);  //记录每个人的结束时间
	vector<node> window(N+1); //记录窗口的结构体
	vector<int> timing(K+1);  //输入所用时间
	for(int i=1;i<=K;i++){
		scanf("%d",&timing[i]);
	}
	for(int i=1;i<=M;i++){
		for(int j=1;j<=N;j++){
			if(index<=K){
				window[j].q.push(timing[index]);
				if(window[j].endtime>=540){
					service[index]=true;
				}
				window[j].endtime+=timing[index];
				if(i==1)
					window[j].poptime=window[j].endtime;
				result[index]=window[j].endtime;
				index++;
			}
		}
	} 
	while(index<=K){
		int tmpmin=window[1].poptime,tmpwindow=1;
		for(int i=2;i<=N;i++){
			if(window[i].poptime<tmpmin){
				tmpwindow=i;
				tmpmin=window[i].poptime;
			}
		}
		window[tmpwindow].q.pop();//抛出
		window[tmpwindow].q.push(timing[index]);
		window[tmpwindow].poptime+=window[tmpwindow].q.front();
		if(window[tmpwindow].endtime>=540){
			service[index]=true;
		}
		window[tmpwindow].endtime+=timing[index];
		result[index]=window[tmpwindow].endtime;
		index++;
	}
	for(int i=1;i<=Q;i++){
		int query,minute;
		scanf("%d",&query);
		minute=result[query];
		if(service[query]==true)
			printf("Sorry\n");
		else
			printf("%02d:%02d\n",(minute+480)/60,(minute+480)%60);
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值