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,消耗时间小数点后有三位数字。
计算任务名称与任务开始时间、消耗时间之间以一个或多个空格隔开,行首和行尾可能有多余的空格。 - 输出
-
排序好的日志记录。每个记录的字符串各占一行。
输入的格式与输入保持一致,输入包括几个空格,你的输出中也应该包含同样多的空格。
-
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<algorithm> #include<iostream> using namespace std; struct data{ char name[10]; char year[11]; char start[13]; double time; char chushi[401]; }; data jilu[10001]; int n=0; bool cmp(data x,data y) { if(x.time!=y.time) { return x.time<y.time; } for(int i=0;i<strlen(x.year);i++) { if(x.year[i]!=y.year[i]) return x.year[i]<y.year[i]; } for(int i=0;i<strlen(x.start);i++) { if(x.start[i]!=y.start[i]) return x.start[i]<y.start[i]; } } int main() { char str[401]; char tmp; n=0; while((tmp=cin.get())!='\n') { cin.putback(tmp); gets(str); //cout<<11<<str<<endl; sscanf(str,"%s%s%s%lf",jilu[n].name,jilu[n].year,jilu[n].start,&jilu[n].time); //cout<<11<<str<<endl; strcpy(jilu[n].chushi,str); //cout<<2<<jilu[n].chushi<<endl; n++; } sort(jilu,jilu+n,cmp); for(int i=0;i<n;i++) { printf("%s\n",jilu[i].chushi); } return 0; }
-