2132: Tmk吃汤饭
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 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);//输出最后顾客取餐时间
}
}