# Poj Solution 2424

```http://poj.org/problem?id=2424

#include"queue"
#include"stdio.h"
using namespace std;

struct node
{
int time;
int dinners;
};

int a[3],ans;
queue<node> have[3];

bool init()
{
char c,t;
int u[3],t1,t2,i;
node nd,nd1;

//cin>>a[0]>>a[1]>>a[2];
scanf("%d%d%d",&a[0],&a[1],&a[2]);

if(a[0]==0&&a[1]==0&&a[2]==0)
return 0;

for(i=0;i<3;i++)
{
while(!have[i].empty())
have[i].pop();
}

ans=0;
u[0]=0,u[1]=0,u[2]=0;

while(1)
{

do{
scanf("%c",&c);
}while(! (c=='#'||(c<='9'&&c>='0')) );

if(c=='#')break;

scanf("%d:%d %d",&t1,&t2,&nd.dinners);

nd.time=((c-'0')*10+t1)*60+t2;
i=(nd.dinners-1)/2;

//    if(i>=3||i<0)continue;

while(!have[i].empty())
{
nd1=have[i].front();

if(nd1.time>nd.time)
break;

ans+=nd1.dinners;
have[i].pop();
u[i]--;
}

if(u[i]==a[i]&&!have[i].empty())
{
nd1=have[i].front();
if(nd1.time<=nd.time+30)
{
ans+=nd1.dinners;
nd.time=nd1.time;

have[i].pop();
u[i]--;
}
}

if(u[i]<a[i])
{
u[i]++;
nd.time+=30;
if(nd.time<=23*60)
have[i].push(nd);
}
}

for(i=0;i<3;i++)
while(!have[i].empty())
{
nd1=have[i].front();
ans+=nd1.dinners;
have[i].pop();
u[i]--;
}

return 1;

}

int main()
{
while(init())
{
printf("%dn",ans);
}
return 0;
}

```
This entry was posted in poj. Bookmark the permalink.