1006 Sign In and Sign Out

题目大意:
告诉你M个工作人员的出入记录,最早进门的人负责开门,最晚出门的负责关门。
请问,谁开的门和谁关的门。

总体思想是把所有人的进出时间统一到一个可以比较的刻度上,比如,进出时间是当天的第几秒。
之后用2个临时变量保存当前着的进出时间和最早和最晚比,更新最早和最晚时间。
输出最后结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <bits/stdc++.h>
using namespace std;

int f(int h, int m, int s) {
return h * 3600 + m * 60 + s;
}

int main() {
int M, minIN = INT32_MAX, maxOUT = INT32_MIN;
scanf("%d", &M);
string unlocked, locked;
for (int i = 0; i < M; i++) {
string p;
cin >> p;
int h1, m1, s1, h2, m2, s2;
scanf("%d:%d:%d %d:%d:%d", &h1, &m1, &s1, &h2, &m2, &s2);
int tempIN = f(h1, m1, s1);
int tempOUT = f(h2, m2, s2);
if (tempIN < minIN) {
unlocked = p;
minIN = tempIN;
}
if (tempOUT > maxOUT) {
locked = p;
maxOUT = tempOUT;
}
}
cout << unlocked << " " << locked << endl;

return 0;
}



3
CS301111 15:30:28 17:00:10
SC3021234 08:00:00 11:25:25
CS301133 21:45:00 21:58:40

SC3021234 CS301133