HDU ACM 1103 Flo's Restaurant
來源:程序員人生 發布時間:2015-05-14 09:08:31 閱讀次數:3929次
分析:借助STL的min_element實現。每次更新最早被占用的桌子,具體見注釋。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int A,B,C;
char s[10];
int a[102],b[102],c[102];
int curtime,count,ans;
int *p; //桌子最早空閑時間
while(cin>>A>>B>>C,A+B+C)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
ans=0;
while(cin>>s && s[0]!='#')
{
curtime=(s[0]-'0')*10+(s[1]-'0');
curtime=curtime*60+(s[3]-'0')*10+(s[4]-'0');
cin>>count;
if(count==1||count==2)
{
p=min_element(a,a+A); //獲得最小值(也即桌子的最早空余時間)
if(*p<=curtime+30) //顧客等30分鐘后是不是有坐位
{
if(*p<=curtime) *p=curtime+30; //最早被占用的桌子的顧客已離開了,新顧客可以入坐
else *p+=30; //新顧客還需等待
ans+=count;
}
}
if(count==3||count==4)
{
p=min_element(b,b+B); //獲得最小值(也即桌子的最早空余時間)
if(*p<=curtime+30) //顧客等30分鐘后是不是有坐位
{
if(*p<=curtime) *p=curtime+30; //最早被占用的桌子的顧客已離開了,新顧客可以入坐
else *p+=30; //新顧客還需等待
ans+=count;
}
}
if(count==5||count==6)
{
p=min_element(c,c+C); //獲得最小值(也即桌子的最早空余時間)
if(*p<=curtime+30) //顧客等30分鐘后是不是有坐位
{
if(*p<=curtime) *p=curtime+30; //最早被占用的桌子的顧客已離開了,新顧客可以入坐
else *p+=30; //新顧客還需等待
ans+=count;
}
}
}
cout<<ans<<endl;
}
return 0;
}
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈