九度OJ 1130:日志排序 (排序)
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:1265
解决:303
- 题目描述:
-
有一个网络日志,记录了网络中计算任务的执行情况,每个计算任务对应一条如下形式的日志记录:
“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)
思路:
排序的条件较多,注意字符串处理的细节错误。
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h> #define M 10000 struct task {
char str[100];
char name[10+1];
char date[2][20];
double cost;
}; int compare(char *s1, char *s2, int i)
{
int a = atoi(s1+i);
int b = atoi(s2+i);
if (a == b)
return 0;
else
return (a>b) ? 1 : -1;
} int cmp(const void *a, const void *b)
{
struct task *x = (struct task *)a, *y = (struct task *)b;
if (x->cost != y->cost)
return (x->cost > y->cost) ? 1 : -1;
int res;
res = compare(x->date[0], y->date[0], 0);
if (res)
return res;
res = compare(x->date[0], y->date[0], 5);
if (res)
return res;
res = compare(x->date[0], y->date[0], 8);
if (res)
return res;
res = compare(x->date[1], y->date[1], 0);
if (res)
return res;
res = compare(x->date[1], y->date[1], 3);
if (res)
return res;
res = compare(x->date[1], y->date[1], 6);
if (res)
return res;
res = compare(x->date[1], y->date[1], 9);
return res;
} int main(void)
{
int i;
char s[20];
struct task t[M];
int k; k = 0;
while (gets(t[k].str))
{
sscanf(t[k].str, "%s%s%s%s", t[k].name, t[k].date[0], t[k].
date[1], s);
t[k].cost = atof(s);
k++;
} qsort(t, k, sizeof(t[0]), cmp); for (i=0; i<k; i++)
printf("%s\n", t[i].str); return 0;
}
/**************************************************************
Problem: 1130
User: liangrx06
Language: C
Result: Accepted
Time:30 ms
Memory:2564 kb
****************************************************************/
九度OJ 1130:日志排序 (排序)的更多相关文章
- 九度OJ 1349 数字在排序数组中出现的次数 -- 二分查找
题目地址:http://ac.jobdu.com/problem.php?pid=1349 题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数 ...
- 九度OJ 1196:成绩排序 (排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4339 解决:1476 题目描述: 用一维数组存储学号和成绩,然后,按成绩排序输出. 输入: 输入第一行包括一个整数N(1<=N< ...
- 九度OJ 1185:特殊排序 (排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:15588 解决:3592 题目描述: 输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序. 输入: 输入第一行包括1个整数N,1< ...
- 九度OJ 1066:字符串排序 (排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5632 解决:2299 题目描述: 输入一个长度不超过20的字符串,对所输入的字符串,按照ASCII码的大小从小到大进行排序,请输出排序后的 ...
- 九度OJ 1061:成绩排序 (排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:17158 解决:4798 题目描述: 有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相 ...
- 九度OJ 1023:EXCEL排序 (排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:14605 解决:3307 题目描述: Excel可以对一组纪录按任意指定列排序.现请你编写程序实现类似功能. 对每个测试用例 ...
- 九度OJ 1135:字符串排序 (排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1559 解决:807 题目描述: 先输入你要输入的字符串的个数.然后换行输入该组字符串.每个字符串以回车结束,每个字符串少于一百个字符. 如 ...
- 九度oj 题目1202:排序
题目1202:排序 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:28802 解决:9408 题目描述: 对输入的n个数进行排序并输出. 输入: 输入的第一行包括一个整数n(1<=n ...
- 九度oj 1349 数字在排序数组中出现的次数
原题链接:http://ac.jobdu.com/problem.php?pid=1349 二分.. #include<algorithm> #include<iostream> ...
随机推荐
- linux 时间模块 二
Linux中有硬件时钟与系统时钟 在Linux中有硬件时钟与系统时钟等两种时钟.硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟.系统时钟则是指kernel中的时钟.当Linux启 ...
- Linux文件权限与属性详解 之 SUID、SGID&SBIT
一.SetUID 1.Linux普通用户可以修改自己的密码,这个是一个合情合理的设置; 修改密码其实修改的是/etc/shadow这个文件,这个文件的属性: ----------. 1 root ro ...
- Spring Boot中使用AOP记录请求日志
这周看别人写的springboot后端代码中有使用AOP记录请求日志,以前没接触过,因此学习下. 一.AOP简介 AOP为Aspect Oriented Programming的缩写,意为:面向切面编 ...
- 迅雷中Peer连接信息中的状态解释(转)
在标准 Peer-to-Peer(P2P 点对点网络)中,以"Flags"表示 Peer Status(Peer 状态).其中: D - 正从 Peer 下载(感兴趣:解阻塞)搜索 ...
- Android 中状态栏、标题栏、View的大小及区分
1.获得状态栏的高度(状态栏相对Window的位置): Rect frame = new Rect(); getWindow().getDecorView().getWindowVisibleDisp ...
- mac os安装jdk、卸载
1.JAVA版本8u171与8u172的区别 https://blog.csdn.net/u014653815/article/details/80435226 奇数版本是稳定版本,上面修订的所有 ...
- C# 使用xenocode混淆加密【转】
http://www.cnblogs.com/chendaoyin/archive/2013/05/03/3056692.html 之前就了解过混淆加密工具,但这还是第一次使用,选择了xenoco ...
- Python3.2官方文档翻译--作用域和命名空间实例
6.2.1 作用域和命名空间实例 以下的实例主要用来示范怎样引用不同的作用域和命名空间,keywordglobal和nonlocalru怎样影响变量绑定. 实例执行结果是: After local a ...
- 如何使用电骡eMule上传资源
1 在电脑中创建一个文件夹专门为上传资源使用 在里面放入任意文件并右击显示ED2K链接 链接效果如下 2 登陆verycd网站,并点击上传资源 复制ED2K地址并选择分类
- java性能监控工具jconsole-windows
jconsole Starts a graphical console that lets you monitor and manage Java applications. Synopsis jco ...