• 九度OnlineJudge之1022:游船出租


    题目描述:                       

        现有公园游船租赁处请你编写一个租船管理系统。当游客租船时,管理员输入船号并按下S键,系统开始计时;当游客还船时,管理员输入船号并按下E键,系统结束计时。船号为不超过100的正整数。当管理员将0作为船号输入时,表示一天租船工作结束,系统应输出当天的游客租船次数和平均租船时间。
        注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有租船没有还船,或者只有还船没有租船的纪录,系统应能自动忽略这种无效纪录。
    输入:                       

        测试输入包含若干测试用例,每个测试用例为一整天的租船纪录,格式为:
        船号(1~100) 键值(S或E) 发生时间(小时:分钟)
        每一天的纪录保证按时间递增的顺序给出。当读到船号为-1时,全部输入结束,相应的结果不要输出。

    输出:                       
        对每个测试用例输出1行,即当天的游客租船次数和平均租船时间(以分钟为单位的精确到个位的整数时间)。
    样例输入:                       
    1 S 08:10
    2 S 08:35
    1 E 10:00
    2 E 13:16
    0 S 17:00
    0 S 17:00
    3 E 08:10
    1 S 08:20
    2 S 09:00
    1 E 09:20
    0 E 17:00
    -1
    样例输出:                       
    2 196
    0 0
    1 60
    #include <string>
    #include <iostream>
    #include <cstring>
    #include <map>
    
    using namespace std;
    
    struct Note
    {
     int id;
     char ch;
     string s;
     string e;      
    };
    
    inline int getInt(string str)
    {
        int s1 = str[0]-'0';
        int s2 = str[1]-'0';
        int s3 = str[3]-'0';
        int s4 = str[4]-'0';   
                  
     return (s1*10+s2)*60 + s3*10+s4;     
    }
    
    int flag1[101];
    int flag2[101];
    
    int main()
    {
        int N;
        char ch;
        string time;
        map<int,Note> m;
        
        while(cin>>N,N!=-1)
        {
             cin>>ch>>time;
             if(N==0)
             {
             int k=0;
             int sum=0;
             for(int i=1;i<=100;i++)
             {
               if(flag1[i]==1&&flag2[i]==1)
               {
                  ++k; 
                  string start = m[i].s;
                  string end = m[i].e;
                  int a = getInt(start);
                  int b = getInt(end);
                  sum+=b-a;
               }           
             }  
            
               if(k==0) cout<<"0 0"<<endl;
               else 
                cout<<k<<" "<<int((double)sum/k+0.5)<<endl;
             
             m.clear();
             memset(flag1,0,sizeof(flag1));
             memset(flag2,0,sizeof(flag2));
             continue;
             }
             else
             {
               Note n;
               n.ch = ch;
               n.id = N;          
               if(ch=='S')
               {
                n.s = time;
                 flag1[N]=1;
                 m.insert(make_pair(N,n));   
               } 
        
               if(ch=='E' && flag1[N]==1)
               {
                
                m[N].e = time;               
                flag2[N]=1;                   
               }   
               
                                             
             }                      
        }
              
       // system("PAUSE");
        return 0;
    }
    
  • 相关阅读:
    面试题33:把数组排成最小的数
    面试题32:从1到n整数中1出现的次数
    面试题31:连续子数组的最大和
    HTTPS 及加密信息全解析
    面试题30:最小的k个数
    linux退出vi
    linux清除当前屏幕
    java web开发环境配置
    jQuery积累
    html5离线应用详摘
  • 原文地址:https://www.cnblogs.com/riskyer/p/3323100.html
Copyright © 2020-2023  润新知