zoukankan      html  css  js  c++  java
  • 九度oj 题目1130:日志排序

    题目描述:

    有一个网络日志,记录了网络中计算任务的执行情况,每个计算任务对应一条如下形式的日志记录:
    “hs_10000_p”是计算任务的名称,
    “2007-01-17 19:22:53,315”是计算任务开始执行的时间“年-月-日 时:分:秒,毫秒”,
    “253.035(s)”是计算任务消耗的时间(以秒计)
    hs_10000_p 2007-01-17 19:22:53,315 253.035(s)
    请你写一个程序,对日志中记录计算任务进行排序。
    时间消耗少的计算任务排在前面,时间消耗多的计算任务排在后面。
    如果两个计算任务消耗的时间相同,则将开始执行时间早的计算任务排在前面。

    输入:

    日志中每个记录是一个字符串,每个字符串占一行。最后一行为空行,表示日志结束。日志中最多可能有10000条记录。
    计算任务名称的长度不超过10,开始执行时间的格式是YYYY-MM-DD HH:MM:SS,MMM,消耗时间小数点后有三位数字。
    计算任务名称与任务开始时间、消耗时间之间以一个或多个空格隔开,行首和行尾可能有多余的空格。

    输出:

    排序好的日志记录。每个记录的字符串各占一行。
    输入的格式与输入保持一致,输入包括几个空格,你的输出中也应该包含同样多的空格。

    样例输入:
    hs_10000_p   2007-01-17 19:22:53,315     253.035(s)
    hs_10001_p   2007-01-17 19:22:53,315     253.846(s)
    hs_10002_m   2007-01-17 19:22:53,315     129.574(s)
    hs_10002_p   2007-01-17 19:22:53,315     262.531(s)
    hs_10003_m   2007-01-17 19:22:53,318     126.622(s)
    hs_10003_p   2007-01-17 19:22:53,318     136.962(s)
    hs_10005_m   2007-01-17 19:22:53,318     130.487(s)
    hs_10005_p   2007-01-17 19:22:53,318     253.035(s)
    hs_10006_m   2007-01-17 19:22:53,318     248.548(s)
    hs_10006_p   2007-01-17 19:25:23,367    3146.827(s)
    样例输出:
    hs_10003_m   2007-01-17 19:22:53,318     126.622(s)
    hs_10002_m   2007-01-17 19:22:53,315     129.574(s)
    hs_10005_m   2007-01-17 19:22:53,318     130.487(s)
    hs_10003_p   2007-01-17 19:22:53,318     136.962(s)
    hs_10006_m   2007-01-17 19:22:53,318     248.548(s)
    hs_10000_p   2007-01-17 19:22:53,315     253.035(s)
    hs_10005_p   2007-01-17 19:22:53,318     253.035(s)
    hs_10001_p   2007-01-17 19:22:53,315     253.846(s)
    hs_10002_p   2007-01-17 19:22:53,315     262.531(s)
    hs_10006_p   2007-01-17 19:25:23,367    3146.827(s)

     1 #include <cstdio>
     2 #include <string>
     3 #include <cstring>
     4 #include <algorithm>
     5 #define MAX 302
     6  
     7 char toDo[10002][MAX];
     8  
     9 struct Task
    10 {
    11   char name[12];
    12   char day[12];
    13   char times[20];
    14   double cost;
    15   int id;
    16 };
    17 Task task[10002];
    18  
    19 int cmp(const void *a, const void *b) {
    20     Task at = *(Task*)a;
    21     Task bt = *(Task*)b;
    22     if(at.cost == bt.cost) {
    23       int tmpa = strcmp(at.day,bt.day);
    24         if(tmpa == 0) {
    25           int tmpb = strcmp(at.times, bt.times);
    26           if(tmpb == 0) {
    27               return at.id - bt.id;
    28           }
    29           else {
    30               return tmpb;
    31           }
    32         }
    33         else {
    34           return tmpa;
    35         }
    36     }
    37     else {
    38        if(at.cost > bt.cost) {
    39             return 1;
    40        }
    41        else {
    42             return -1;
    43        }
    44     }
    45      
    46 }
    47  
    48  
    49 int main(int argc, char const *argv[])
    50 {
    51     //freopen("input.txt","r",stdin);
    52     int k = 0;
    53     while(gets(toDo[k]) != 0) {
    54         sscanf(toDo[k], "%s %s %s %lf",task[k].name,task[k].day,task[k].times,&task[k].cost);
    55         task[k].id = k;
    56         k++;
    57     }
    58     qsort(task, k, sizeof(Task), cmp);
    59     for(int i = 0; i < k; i++) {
    60       puts(toDo[task[i].id]);
    61     }
    62     return 0;
    63 }

    注意如果直接return a - b; 如果 a - b = 0.01,转化为int 就成为0了

  • 相关阅读:
    利用后退按钮进行重复提交的解决办法。
    运用上传拦截器时遇到的一个问题
    Fckeditor上传图片的错误
    关于分页的一些经验。
    spring在web工程中的运用
    引入js失败的可能原因
    hql执行update行为时可能遇到的一个问题。
    Eclipse下freemarker插件的安装
    同名文本框与同名复选框在传值上的不同.
    spring在java工程中的运用
  • 原文地址:https://www.cnblogs.com/jasonJie/p/5740646.html
Copyright © 2011-2022 走看看