【九度】题目1130:日志排序

2024-08-25 12:38
文章标签 日志 题目 排序 九度 1130

本文主要是介绍【九度】题目1130:日志排序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目地址:http://ac.jobdu.com/problem.php?pid=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)
来源:
2008年北京大学方正实验室计算机研究生机试真题
排序,难点在于时间比较大小。可以转为字符串比较。
C++ AC
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<algorithm>
using namespace std;
const int maxn = 10002;
struct Task{char allMsg[200];char name[12];char startFir[15];char startSec[15];char wasteTime[15];
}tasks[maxn];bool cmp(Task t1,Task t2){int len1 = strlen(t1.wasteTime);int len2 = strlen(t2.wasteTime);if(len1 != len2){return len1 < len2;}else{int tmp = strcmp(t1.wasteTime , t2.wasteTime);if(tmp != 0){return tmp < 0;}else{tmp = strcmp(t1.startFir,t2.startFir);if(tmp != 0){return tmp < 0;}else{return strcmp(t1.startSec,t2.startSec) < 0;}}}
}
int main(){int k = 0;while(gets(tasks[k].allMsg)){sscanf(tasks[k].allMsg,"%s%s%s%s",tasks[k].name,tasks[k].startFir,tasks[k].startSec,tasks[k].wasteTime);k++;}sort(tasks,tasks + k,cmp);for(int i = 0; i < k; i++){cout<<tasks[i].allMsg<<endl;}   return 0;
}
/**************************************************************Problem: 1130User: wangzhenqingLanguage: C++Result: AcceptedTime:130 msMemory:4040 kb
****************************************************************/

Java AC

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern;public class Main {/* * 1130 */  public static void main(String[] args) throws Exception {  BufferedReader br = new BufferedReader(new InputStreamReader( System.in ) )  ;           List<ComputerTask> comTaskList = new ArrayList<ComputerTask>();  while (true) {  String recordTask = br.readLine();  if (recordTask == null || "".equals(recordTask)) {  break;  }  String newRecordTask = recordTask.trim().replaceAll("['  ']+", " ");  String []array = newRecordTask.split(Pattern.quote(" "));   ComputerTask computerTask = new ComputerTask(array[0],   (array[1]+" "+array[2]),array[3],recordTask);  comTaskList.add(computerTask);  }  int size = comTaskList.size();  Collections.sort(comTaskList);  StringBuffer sb = new StringBuffer();  for (int i = 0; i < size; i++) {  sb.append(comTaskList.get(i).getAllMsg()+"\n");  }  System.out.print(sb.toString());  }      
}  
class ComputerTask implements Comparable<ComputerTask>{       private String taskId;  private String taskStartTime;  private String useTime;  private String allMsg;  public String getTaskId() {  return taskId;  }  public void setTaskId(String taskId) {  this.taskId = taskId;  }  public String getTaskStartTime() {  return taskStartTime;  }  public void setTaskStartTime(String taskStartTime) {  this.taskStartTime = taskStartTime;  }  public String getUseTime() {  return useTime;  }  public void setUseTime(String useTime) {  this.useTime = useTime;  }  public String getAllMsg() {  return allMsg;  }  public void setAllMsg(String allMsg) {  this.allMsg = allMsg;  }  public ComputerTask(String taskId, String taskStartTime, String useTime,  String allMsg) {  super();  this.taskId = taskId;  this.taskStartTime = taskStartTime;  this.useTime = useTime;  this.allMsg = allMsg;  }  public int compareTo(ComputerTask o) {  int len1 = this.getUseTime().length();int len2 = o.getUseTime().length();if (len1 != len2) {return len1 - len2;}else {int tmp = this.getUseTime().compareTo(o.getUseTime());if (tmp != 0) {return tmp;}else {len1 = this.getTaskStartTime().length();len2 = o.getTaskStartTime().length();if (len1 != len2) {return len1 - len2;}else {return this.getTaskStartTime().compareTo(o.getTaskStartTime());}}}}  
}/**************************************************************Problem: 1130User: wangzhenqingLanguage: JavaResult: AcceptedTime:1120 msMemory:101560 kb
****************************************************************/

这篇关于【九度】题目1130:日志排序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1105576

相关文章

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

golang 日志log与logrus示例详解

《golang日志log与logrus示例详解》log是Go语言标准库中一个简单的日志库,本文给大家介绍golang日志log与logrus示例详解,感兴趣的朋友一起看看吧... 目录一、Go 标准库 log 详解1. 功能特点2. 常用函数3. 示例代码4. 优势和局限二、第三方库 logrus 详解1.

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

SQL Server清除日志文件ERRORLOG和删除tempdb.mdf

《SQLServer清除日志文件ERRORLOG和删除tempdb.mdf》数据库再使用一段时间后,日志文件会增大,特别是在磁盘容量不足的情况下,更是需要缩减,以下为缩减方法:如果可以停止SQLSe... 目录缩减 ERRORLOG 文件(停止服务后)停止 SQL Server 服务:找到错误日志文件:删除

C++快速排序超详细讲解

《C++快速排序超详细讲解》快速排序是一种高效的排序算法,通过分治法将数组划分为两部分,递归排序,直到整个数组有序,通过代码解析和示例,详细解释了快速排序的工作原理和实现过程,需要的朋友可以参考下... 目录一、快速排序原理二、快速排序标准代码三、代码解析四、使用while循环的快速排序1.代码代码1.由快

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri