Bailian2998 日志排序排序

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bailian2998 日志排序排序相关的知识,希望对你有一定的参考价值。

2998:日志排序

总时间限制: 1000ms 内存限制: 65536kB
描述
有一个网络日志,记录了网络中计算任务的执行情况,每个计算任务对应一条如下形式的日志记录:“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)

问题链接Bailian2998 日志排序
问题简述:(略)
问题分析:文本处理和排序问题,不解释。
程序说明:(略)
参考链接:(略)
题记:(略)

AC的C++语言程序如下:

/* Bailian2998 日志排序 */

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

const int N = 10000;
const int L = 256;
char s[L];
struct Record 
    char name[10 + 1];
    char year[10 + 1];
    char time[16];
    double tlong;
    char s[L];
 r[N];

bool cmp(Record a, Record b)

    return a.tlong != b.tlong ?
                a.tlong < b.tlong
              :
                (strcmp(a.year, b.year) == 0 ? strcmp(a.time, b.time) < 0 : strcmp(a.year, b.year) < 0);


int main()

    int cnt = 0;
    while (cin.getline(r[cnt].s, L)) 
        if (r[cnt].s[0] == '\\0') break;
        sscanf(r[cnt].s, "%s%s%s%lf", r[cnt].name, r[cnt].year, r[cnt].time, &r[cnt].tlong);
        cnt++;
    

    sort(r, r + cnt, cmp);

    for (int i = 0; i < cnt; i++)
        printf("%s\\n", r[i].s);

    return 0;

以上是关于Bailian2998 日志排序排序的主要内容,如果未能解决你的问题,请参考以下文章

Bailian3719 学生信息用qsort排序排序+字符串库函数

Bailian3719 学生信息用qsort排序排序+字符串库函数

Bailian3260 赛手查询排序

Bailian3260 赛手查询排序

Bailian3729 用set实现字符串的排序和查找文本处理

Bailian3729 用set实现字符串的排序和查找文本处理