题目链接:点击这里
题意:每天早上,第一个到机房签到的人开门,最后一个签到的人锁门。根据登记进出的记录,你应该可以找到当天开门和关门的人。
思路:将时间 hh:mm:ss
都转化为秒,在遍历 m 条进出记录的同时,分别记录最小时间对应的 id 号和最大时间对应的 id 号,输出答案即可。
AC代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
int m;
scanf("%d", &m);
string id, first_id, last_id;
int hh, mm, ss, first_in = 1e9, last_out = -1e9;
for(int i = 0; i < m; i++)
{
cin >> id;
scanf("%d:%d:%d", &hh, &mm, &ss);
int t = hh * 3600 + mm * 60 + ss;
if(t < first_in)
{
first_in = t;
first_id = id;
}
scanf("%d:%d:%d", &hh, &mm, &ss);
t = hh * 3600 + mm * 60 + ss;
if(t > last_out)
{
last_out = t;
last_id = id;
}
}
cout << first_id << " " << last_id << endl;
return 0;
}
微信公众号《算法竞赛求职》,致力于详细讲解竞赛和求职所涉及到的算法原理和模板。欢迎关注,一起交流进步!