【九度】题目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日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

C++归并排序代码实现示例代码

《C++归并排序代码实现示例代码》归并排序将待排序数组分成两个子数组,分别对这两个子数组进行排序,然后将排序好的子数组合并,得到排序后的数组,:本文主要介绍C++归并排序代码实现的相关资料,需要的... 目录1 算法核心思想2 代码实现3 算法时间复杂度1 算法核心思想归并排序是一种高效的排序方式,需要用

nginx配置错误日志的实现步骤

《nginx配置错误日志的实现步骤》配置nginx代理过程中,如果出现错误,需要看日志,可以把nginx日志配置出来,以便快速定位日志问题,下面就来介绍一下nginx配置错误日志的实现步骤,感兴趣的可... 目录前言nginx配置错误日志总结前言在配置nginx代理过程中,如果出现错误,需要看日志,可以把

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处