| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
求各位大侠帮忙看看是哪里错了,WA到吐。。T ^ T#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
struct Time
{
int t;
bool operator < (const Time &temp) const
{
return t>temp.t;
}
} cnt;
priority_queue<Time> q[3];
int num[3];
int limit[3];
char str[11];
int main()
{
while(~scanf("%d%d%d",&limit[0],&limit[1],&limit[2]))
{
if(limit[0]+limit[1]+limit[2]==0)
break;
for(int i=0;i<3;i++)
while(!q[i].empty())
q[i].pop();
int ans=0;
num[0]=num[1]=num[2]=0;
while(1)
{
scanf("%s",str);
if(str[0]=='#')
{
printf("%d\n",ans);
break;
}
int p;
scanf("%d",&p);
int flag=0;
int h=0,m=0;
for(int i=0;str[i]!='\0';i++)
{
if(str[i]==':')
{
flag=1;
continue;
}
if(!flag)
h=h*10+str[i]-'0';
else m=m*10+str[i]-'0';
}
cnt.t=h*60+m;
int pos ;
if(p<=2) pos=0;
else if(p<=4) pos=1;
else pos=2;
if(q[pos].empty())
{
cnt.t+=30;
q[pos].push(cnt);
num[pos]++;
ans+=p;
continue;
}
while(!q[pos].empty())
{
if(q[pos].top().t<=cnt.t)
{
num[pos]--;
q[pos].pop();
}
else break;
}
if(num[pos]<limit[pos])
{
cnt.t+=30;
q[pos].push(cnt);
num[pos]++;
ans+=p;
}
else if(num[pos]==limit[pos])
{
int t=q[pos].top().t;
if(t-cnt.t<=30)
{
ans+=p;
cnt.t=max(cnt.t,t)+30;
q[pos].push(cnt);
num[pos]++;
}
}
//printf("ans = %d\n",ans);
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator