Bailian2998 日志排序排序
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bailian2998 日志排序排序相关的知识,希望对你有一定的参考价值。
总时间限制: 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排序排序+字符串库函数