zzulioj 2132 Tmk喫湯飯(模擬)

2132: Tmk喫湯飯

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

SubmitStatusWeb 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);//輸出最後顧客取餐時間 
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章