zzulioj 2132 Tmk吃汤饭(模拟)

2132: Tmk吃汤饭

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 504   Solved: 219

Submit Status Web Board

Description

Tmk喜欢吃汤饭!

Tmk喜欢吃汤饭!!

Tmk喜欢吃汤饭!!!

汤饭窗口分点餐和取餐两个窗口,一位蜀黍负责点餐窗口,一位蜀黍负责煮汤,一位蜀黍负责打饭,点餐需要1个单位时间,每一份需要煮5个单位时间,同一时间最多可以煮4份。

现在tmk要考考你,给你所有人的到达时刻,每个人在到达时刻排到点餐队列的末尾,点完餐后排到取餐队列,煮好后即可取餐,问你最后一个人取到汤饭的时间。

除了点餐和煮汤的时间,其他时间忽略不计,没人插队,而且他们意志坚定,所以不会中途而废,每个汤饭必须连续煮,不能中断。

 

Input

第一行一个T(0<T<=100),表示有多少组数据。

对于每组数据:

第一行一个整数n(0<=n<=100000)表示有n个人。

第二行,n个整数,以空格隔开(其中t[i]>=0 && t[i] < 50000000 && t[i] > t[i-1]),t[i]表示第i个人的到达时刻。

 

Output

对于每个样例,输出最后一个人取到汤饭的时间。

 

Sample Input

234 5 652 3 4 5 6

Sample Output

1213
代码:
#include<stdio.h>
#include<queue>
using namespace std;
int main()
{
	int t,n;
 
	scanf("%d",&t);
	while(t--)
	{
		queue<int> q;//存放餐点做好的时间 
		scanf("%d",&n);
		int a,num;
		int size;
		int cur=0;//当前时间 
		while(n--)
		{
		   scanf("%d",&a);//a时刻来了一个人 
		   if(cur<=a)//时间提到客人来 
		   {
			  cur=a+1;
		   }
		   //做好的取餐 
		   size=q.size();
		   while(size--)
		   {
		   	  num=q.front();
			  q.pop();
			  if(num>cur) q.push(num);//尚未做好 
		   } 
		   if(q.size()<4) q.push(cur+5);//有空闲的锅,烹饪当前顾客的食品
		   else
		   {
		   	  num=q.front();
			  cur=num; //加速时间到第一份饭做好 
			  //做好的取餐 
			   size=q.size();
		           while(size--)
			   {
			   	  num=q.front();
				  q.pop();
				  if(num>cur) q.push(num);//尚未做好 
			   } 
			   q.push(cur+5); //烹饪当前顾客食品 
		   } 	
		}
		while(!q.empty())//未取餐的顾客取餐 
		{
			num=q.front();
			if(num>cur) cur=num;
			q.pop();
		}
		printf("%d\n",cur);//输出最后顾客取餐时间 
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值