【九度OJ】1013:开门人和关门人
来源:互联网 发布:电动汽车行业前景知乎 编辑:程序博客网 时间:2024/05/22 15:49
地址:
http://ac.jobdu.com/problem.php?pid=1013
题目描述:
每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。现有一堆杂乱的机房签到、签离记录,请根据记录找出当天开门和关门的人。
输入:
测试输入的第一行给出记录的总天数N ( N> 0 ),下面列出了N天的记录。
每天的记录在第一行给出记录的条目数M (M > 0 ),下面是M行,每行的格式为
证件号码 签到时间 签离时间 其中时间按“小时:分钟:秒钟”(各占2位)给出,证件号码是长度不超过15的字符串。
输出:
对每一天的记录输出1行,即当天开门和关门人的证件号码,中间用1空格分隔。
注意:在裁判的标准测试输入中,所有记录保证完整,每个人的签到时间在签离时间之前,且没有多人同时签到或者签离的情况。
样例输入:
3
1
ME3021112225321 00:00:00 23:59:59
2
EE301218 08:05:35 20:56:35
MA301134 12:35:45 21:40:42
3
CS301111 15:30:28 17:00:10
SC3021234 08:00:00 11:25:25
CS301133 21:45:00 21:58:40
样例输出:
ME3021112225321 ME3021112225321
EE301218 MA301134
SC3021234 CS301133
来源:
2005年浙江大学计算机及软件工程研究生机试真题
源码:
#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;int n, m;char record[ 40 ]; //记录struct WORKER{ char name[ 20 ]; int startH; //到达的小时 int startM; //到达的分钟 int startS; //到达的秒钟 int endH; //离开的小时 int endM; //离开的分钟 int endS; //离开的秒钟}worker[100];int workerNum = 0;//将记录信息转化到结构体存储void recordToWorker(){ int id = 0; while( record[ id ] != ' '){ worker[ workerNum ].name[ id ] = record[ id ]; id++; } worker[ workerNum ].name[ id ] = '\0'; id ++; //跳过空格 int a, b; a = ( int )( record[ id++ ] - '0' ); b = ( int )( record[ id++ ] - '0' ); worker[ workerNum ].startH = a * 10 + b; id ++; //跳过冒号 a = ( int )( record[ id++ ] - '0' ); b = ( int )( record[ id++ ] - '0' ); worker[ workerNum ].startM = a * 10 + b; id ++; //跳过冒号 a = ( int )( record[ id++ ] - '0' ); b = ( int )( record[ id++ ] - '0' ); worker[ workerNum ].startS = a * 10 + b; id ++; //跳过空格 a = ( int )( record[ id++ ] - '0' ); b = ( int )( record[ id++ ] - '0' ); worker[ workerNum ].endH = a * 10 + b; id ++; //跳过冒号 a = ( int )( record[ id++ ] - '0' ); b = ( int )( record[ id++ ] - '0' ); worker[ workerNum ].endM = a * 10 + b; id ++; //跳过冒号 a = ( int )( record[ id++ ] - '0' ); b = ( int )( record[ id++ ] - '0' ); worker[ workerNum ].endS = a * 10 + b; workerNum++;}//按照到达时间排序bool cmpStart( WORKER wor1, WORKER wor2 ){ if( wor1.startH != wor2.startH ){ return wor1.startH < wor2.startH; } else if( wor1.startM != wor2.startM ){ return wor1.startM < wor2.startM; } else{ return wor1.startS < wor2.startS; }}//按照离开时间排序bool cmpEnd( WORKER wor1, WORKER wor2 ){ if( wor1.endH != wor2.endH ){ return wor1.endH > wor2.endH; } else if( wor1.endM != wor2.endM ){ return wor1.endM > wor2.endM; } else{ return wor1.endS > wor2.endS; }}int main(){ while( scanf("%d", &n) != EOF ){ while( n-- ){ scanf("%d", &m); int idM = m; workerNum = 0; getchar(); //输入数据 while( idM-- ){ gets( record ); recordToWorker(); } sort( worker, worker+m, cmpStart); for( int i = 0; worker[0].name[ i ] != '\0'; i ++ ){ printf( "%c", worker[0].name[i ] ); } printf( " " ); sort( worker, worker+m, cmpEnd); for( int i = 0; worker[0].name[ i ] != '\0'; i ++ ){ printf( "%c", worker[0].name[ i ] ); } printf( "\n" ); } }}/************************************************************** Problem: 1013 User: 螺小旋 Language: C++ Result: Accepted Time:0 ms Memory:1032 kb****************************************************************/
阅读全文
0 0
- 九度oj-1013-开门人和关门人
- 九度OJ题目1013:开门人和关门人
- 九度OJ 题目1013:开门人和关门人
- 九度OJ 1013:开门人和关门人 (排序)
- 九度OJ 1013 开门人和关门人
- hdu 1234&&九度oj 1013 开门人和关门人
- 九度OJ-题目1013 开门人和关门人
- 题目1013:开门人和关门人 九度OJ
- 九度oj-1013-开门人和关门人
- 【九度OJ】1013:开门人和关门人
- 九度1013 开门人和关门人
- 九度1013 开门人和关门人
- 九度[1013]-开门人和关门人
- 九度oj 题目1013:开门人和关门人 【ZJU2005机试题4】
- 九度OJ题目1013:开门人和关门人解题报告
- 【九度】题目1013:开门人和关门人
- 九度 题目1013:开门人和关门人
- 九度1013:开门人和关门人(优先队列)
- go chan使用 匿名函数执行
- 【C语言】【unix c】信号的产生
- CTF入门--请输入密码
- leetcode1. Two Sum
- kafka_2.11-0.8.2.1+java 生产消费程序demo示例
- 【九度OJ】1013:开门人和关门人
- 模仿优酷菜单
- 关于#pragma pack(n)引发的一系列问题
- Spark2.x学习笔记:4、Spark程序架构与运行模式
- stm32F1RTC
- python re
- html5-localstorage操作(小demo)
- 1的平方加2的平方....一直加到n的平方和是多少?有公式吗
- linux查看端口占用情况