zoukankan      html  css  js  c++  java
  • 【慢慢学算法】:游船出租(浙大研究生复试题)

       题目描述:                                                                                               
        现有公园游船租赁处请你编写一个租船管理系统。当游客租船时,管理员输入船号并按下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
    代码:
     1 #include<stdio.h>
     2 typedef struct node
     3 {
     4     int number;
     5     char c;
     6     char time[5];
     7 }node;
     8 
     9 node inode[1024];
    10 int index = 0,
    11     count = 0,
    12     flag = 0;
    13 float sum = 0;
    14 
    15 int GetTime(int a, int b)
    16 {
    17     char *s1 = inode[a].time;
    18     char *s2 = inode[b].time;
    19     int h,m;
    20     m = (int)(*(s2+3) - *(s1+3))*10 + (int)(*(s2+4) - *(s1+4));
    21     h = (int)(*s2 - *s1)*10 + (int)(*(s2+1) - *(s1+1));
    22     return h*60 + m;
    23 }
    24 
    25 void clear()
    26 {
    27     index = 0;
    28     count = 0;
    29     sum = 0;
    30     flag = 0;
    31 }
    32 
    33 int main()
    34 {
    35     while(scanf("%d", &inode[index].number) && inode[index].number != -1)
    36     {
    37     scanf(" %c%s",&inode[index].c,inode[index].time);
    38     if(inode[index].number == 0)
    39     {
    40         if( sum == 0)
    41         {
    42         printf("0 0\n");
    43         clear();
    44         continue;
    45         }
    46         else
    47         {
    48         printf("%d %d\n",count, (int)(sum/(float)count + 0.5));
    49         clear();
    50         continue;
    51         }
    52     }
    53     for(int i = 0; i < index; i++)
    54     {
    55         if(inode[i].number == inode[index].number)
    56         if(inode[i].c == 'S' && inode[index].c == 'E')
    57         {
    58             count++;
    59             sum += GetTime(i, index);
    60         }
    61     }
    62     index++;
    63     }
    64     return 0;
    65 }
  • 相关阅读:
    poj3693 Maximum repetition substring (后缀数组+rmq)
    spoj687 REPEATS
    bzoj3626: [LNOI2014]LCA (树链剖分+离线线段树)
    bzoj2243 [SDOI2011]染色 (树链剖分+线段树)
    SPOJ QTREE- Query on a tree (树链剖分)
    hdu5662 YJQQQAQ and the function (单调栈)
    hdu4348 To the moon (主席树 || 离线线段树)
    hdu3565 Bi-peak Number (有上界和下界的数位dp)
    修改文件上传大小限制
    强制不按行
  • 原文地址:https://www.cnblogs.com/VortexPiggy/p/2493379.html
Copyright © 2011-2022 走看看