POJ 2424 Flo’s Restaurant
题意:解题过程:AC代码:
POJ 2424 Flo’s Restaurant
题目传送门
题意:
你在开一个餐厅,共有三种桌子,第一种:只能坐1~2个人,第二种:只能坐3~4个人,第三种:只能做5~6个人,每种桌子分别有A、B、C张,有一些客人会来吃饭,但可能会出现客人会等待的情况。假设每桌都要吃半小时,如果一个客人需要等的时间多余半小时,那么他们就会离开,给出你这些客人到达的时间,问你总共能够招待多少客人。
解题过程:
比较简单的模拟,注意时间的处理就行了。我的代码感觉很烂,由于懒得手写队列,于是就暴力的表里了一遍,导致这题的空间直接扩大了三倍,只是题目数据小,很容易就过了,不过还是不推荐我的代码……
AC代码:
using namespace std;
const
int maxn=
200;
typedef pair<
int,
int>P;
int A,B,C;
int h,
m;
int cnt;
queue<P>a,b,c;
inline
int gettime(
int h1,
int m1,
int h2,
int m2) {
int ans=
0;
ans+=(h2-h1)
*60+m2-m1;
return ans;
}
int main() {
while(scanf(
"%d%d%d",&A,&B,&C)&&A&&B&&C) {
int ans=
0;
while(!a.empty())a.
pop();
while(!b.empty())b.
pop();
while(!c.empty())c.
pop();
while(
1) {
char ch=getchar();
while(ch==
' '||ch==
'\n'||ch==
'\r') {
ch=getchar();
}
if(ch==
'#')
break;
scanf(
"%d:%d",&h,&
m);
int xx=ch-
'0';
h=xx
*10+h;
scanf(
"%d",&cnt);
if(cnt>=
1&&cnt<=
2) {
int cc=a.size();
for(
int i=
1;i<=cc;i++) {
P t=a.front();
a.
pop();
int tt=gettime(t.fi,t.se,h,
m);
if(tt<
30) {
a.
push(P(t.fi,t.se));
}
}
int peop=a.size();
if(peop<A) {
a.
push(P(h,
m));
ans+=cnt;
}
else {
int mint=
0x3f3f3f3f;
int cc=a.size();
int pos;
for(
int i=
1;i<=cc;i++){
P t=a.front();
a.
pop();
int tt=gettime(t.fi,t.se,h,
m);
tt=
30-tt;
if(mint>tt) {
mint=tt;
pos=i;
}
a.
push(P(t.fi,t.se));
}
if(mint<=
30) {
for(
int i=
1;i<
pos;i++){
P t=a.front();
a.
pop();
a.
push(P(t.fi,t.se));
}
a.
pop();
m+=mint;
if(
m>=
60)
m-=
60,h+=
1;
a.
push(P(h,
m));
ans+=cnt;
}
}
}
if(cnt>=
3&&cnt<=
4) {
int cc=b.size();
for(
int i=
1;i<=cc;i++) {
P t=b.front();
b.
pop();
int tt=gettime(t.fi,t.se,h,
m);
if(tt<
30) {
b.
push(P(t.fi,t.se));
}
}
int peop=b.size();
if(peop<B) {
b.
push(P(h,
m));
ans+=cnt;
}
else {
int mint=
0x3f3f3f3f;
int cc=b.size();
int pos;
for(
int i=
1;i<=cc;i++){
P t=b.front();
b.
pop();
int tt=gettime(t.fi,t.se,h,
m);
tt=
30-tt;
if(mint>tt) {
mint=tt;
pos=i;
}
b.
push(P(t.fi,t.se));
}
if(mint<=
30) {
for(
int i=
1;i<
pos;i++){
P t=b.front();
b.
pop();
b.
push(P(t.fi,t.se));
}
b.
pop();
m+=mint;
if(
m>=
60)
m-=
60,h+=
1;
b.
push(P(h,
m));
ans+=cnt;
}
}
}
if(cnt>=
5&&cnt<=
6) {
int cc=c.size();
for(
int i=
1;i<=cc;i++) {
P t=c.front();
c.
pop();
int tt=gettime(t.fi,t.se,h,
m);
if(tt<
30) {
c.
push(P(t.fi,t.se));
}
}
int peop=c.size();
if(peop<C) {
c.
push(P(h,
m));
ans+=cnt;
}
else {
int mint=
0x3f3f3f3f;
int cc=c.size();
int pos;
for(
int i=
1;i<=cc;i++){
P t=c.front();
c.
pop();
int tt=gettime(t.fi,t.se,h,
m);
tt=
30-tt;
if(mint>tt) {
mint=tt;
pos=i;
}
c.
push(P(t.fi,t.se));
}
if(mint<=
30) {
for(
int i=
1;i<
pos;i++){
P t=c.front();
c.
pop();
c.
push(P(t.fi,t.se));
}
c.
pop();
m+=mint;
if(
m>=
60)
m-=
60,h+=
1;
c.
push(P(h,
m));
ans+=cnt;
}
}
}
}
printf(
"%d\n",ans);
}
return 0;
}
本人蒟蒻OIer一枚,欢迎加QQ:840776708一起学习蛤。
转载于:https://www.cnblogs.com/Apocrypha/p/9433663.html
相关资源:JAVA上百实例源码以及开源项目