2132: Tmk喫湯飯
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 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
Sample Output
#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);//輸出最後顧客取餐時間
}
}