目录
1,题目描述
Sample Input:
3
CS301111 15:30:28 17:00:10
SC3021234 08:00:00 11:25:25
CS301133 21:45:00 21:58:40
Sample Output:
SC3021234 CS301133
题目大意:
公司的每个员工都要签到和签退,最先签到的人开门,最后签退的人关门,找出每天开门和关门的人的ID;
- 每个人签到时间必定早于签退时间;
- 不存在两个人同时签到/签退;
输入
第一行:M:每天的记录总数;
其余M行:ID:签到人员;签到时间;签退时间
输出
开门人ID 关门人ID
2,思路
一开始还在考虑如何用二维数组存放数据(元素为string类型);
还想着怎样设计比较函数来判断时间大小;
看完大神的想法后,我自闭了。。。
- 只需要记录最大时间和最小时间即可,根本不需要存储全部数据!!!(下饺子一样,过一遍就可以了)
- scanf("%d:%d:%d %d:%d:%d", &h1, &m1, &s1, &h2, &m2, &s2):这种scanf手法学到了!
- 比较时间时先换算成秒!
- 最大时间初始化为最小值INT_MIN;最小时间初始化为最大值INT_MAX;(INT_MAX/INT_MIN包含在头文件climits中)
3,代码【C++】
#include<iostream>
#include<climits>
using namespace std;
int main(){
//#ifdef ONLINE_JUDGE
//#else
// freopen("1.txt", "r", stdin);
//#endif
int num, early = INT_MAX, late = INT_MIN;
string first, last;
cin>>num;
for(int i = 0; i < num; i++){
string ID;
cin>>ID;
int h1, m1, s1, h2, m2, s2;
scanf("%d:%d:%d %d:%d:%d", &h1, &m1, &s1, &h2, &m2, &s2);
int time1 = h1*3600 + m1*60 + s1;
int time2 = h2*3600 + m2*60 + s2;
if(time1 < early){
early = time1;
first = ID;
}
if(time2 > late){
late = time2;
last = ID;
}
}
cout<<first<<' '<<last;
return 0;
}