zoukankan      html  css  js  c++  java
  • HDU1103

    题意:一家店从早上8点开始营业,一共有3种座位(2人座,4人座,6人座),每次来一批客人 吃饭时间30分钟,下一批没座的客人最多等30分钟

    模拟!

    关键在于存储每种座位什么时候是空的,或者说什么时候客人会离开,可以用队列来存储!(题目给定的就是按时间顺序的)

    View Code
      1 #include<stdio.h>
      2 #include<algorithm>
      3 #include<stdlib.h>
      4 #include<queue>
      5 using namespace std;
      6 const int maxn = 1005;
      7 struct node{
      8     int t,num;
      9 }a[ maxn ];
     10 queue<int>q1;
     11 queue<int>q2;
     12 queue<int>q3;
     13 //1 2 3分别存储着2人座,4人座,6人座的人的离开时间
     14 int main(){
     15     int A,B,C;
     16     while( scanf("%d%d%d",&A,&B,&C)==3 ,A+B+C ){
     17         int cnt=0;
     18         while( !q1.empty() )q1.pop();
     19         while( !q2.empty() )q2.pop();
     20         while( !q3.empty() )q3.pop();
     21         char s[ 10 ];
     22         while( scanf("%s",s)!=EOF ){
     23             if( strcmp( s,"#" )==0 )
     24                 break;
     25             int time=0,num;
     26             time=( s[4]-'0' )+( s[3]-'0' )*10+60*( (s[1]-'0')+10*(s[0]-'0') );
     27             scanf("%d",&num);
     28             a[ cnt ].num=num,a[ cnt ].t=time,cnt++;
     29         }//input
     30         int ans=0;
     31         int time1,time2,time3;
     32         for( int i=0;i<cnt;i++ ){
     33             /*
     34             if( a[i].t>last_time )
     35                 break;
     36             if( time1>last_time+30||time2>last_time+30||time3>last_time+30 )
     37                 break;
     38                 */
     39             if( a[i].num>=1&&a[i].num<=2 ){
     40                 if( A>0 ) {
     41                     A--;
     42                     ans+=a[i].num;
     43                     q1.push( (a[i].t+30) );
     44                 }//如果有空位
     45                 else {
     46                     time1=q1.front();
     47                     if( a[i].t>=time1-30&&a[i].t<=time1 ){
     48                         ans+=a[i].num;
     49                         q1.pop();
     50                         q1.push( max(a[i].t+30,time1+30) );
     51                     }//等上一波客人30分钟
     52                     else if( a[i].t>time1 ) {
     53                         q1.pop();
     54                         ans+=a[i].num;
     55                         q1.push( a[i].t+30 );
     56                     }//有空位
     57                 }
     58             }//2
     59             else if( a[i].num>=3&&a[i].num<=4 ){
     60                 if( B>0 ) {
     61                     B--;
     62                     ans+=a[i].num;
     63                     q2.push( (a[i].t+30) );//the every end time
     64                 }
     65                 else {
     66                     time2=q2.front();
     67                     if( a[i].t>=time2-30&&a[i].t<=time2 ){
     68                         ans+=a[i].num;
     69                         q2.pop();
     70                         q2.push( max(a[i].t+30,time2+30) );
     71                     }//等上一波客人30分钟
     72                     else if( a[i].t>time2 ) {
     73                         q2.pop();
     74                         ans+=a[i].num;
     75                         q2.push( a[i].t+30 );
     76                     }
     77                 }
     78             }//4
     79             else if( a[i].num>=5&&a[i].num<=6 ){
     80                 if( C>0 ) {
     81                     C--;
     82                     ans+=a[i].num;
     83                     q3.push( (a[i].t+30) );//the every end time
     84                 }
     85                 else {
     86                     time3=q3.front();
     87                     if( a[i].t>=time3-30&&a[i].t<=time3 ){
     88                         ans+=a[i].num;
     89                         q3.pop();
     90                         q3.push( max(a[i].t+30,time3+30) );
     91                     }//等上一波客人30分钟
     92                     else if( a[i].t>time3 ) {
     93                         q3.pop();
     94                         ans+=a[i].num;
     95                         q3.push( a[i].t+30 );
     96                     }
     97                 }
     98             }//6
     99         }
    100         printf("%d\n",ans);
    101     }
    102     return 0;
    103 }
    keep moving...
  • 相关阅读:
    数据结构实现(四)二叉查找树java实现
    数据结构实现(三)二叉树
    git
    抓包原理
    数据结构实现(二)队列
    86. Partition List
    82. Remove Duplicates from Sorted List II
    83. Remove Duplicates from Sorted List
    排序算法总结
    上下文切换详解
  • 原文地址:https://www.cnblogs.com/xxx0624/p/2908122.html
Copyright © 2011-2022 走看看