1006 簽到和簽退
每天一開始,第一個在到機房簽到的人會打開門,最後一個離開機房簽退的人會鎖上門。根據簽到和簽退的記錄,你應該找到那天開門和鎖門的人。
輸入規範
每個輸入文件包含一個測試用例。每個用例都有一天的記錄。用例以正整數M開頭,M是記錄總數,後跟M行,格式如下:
ID_number Sign_in_time Sign_out_time
其中時間以HH:MM:SS
格式給出,ID_number
是一個不超過15個字符的字符串。
輸出格式
對於每個測試用例,在一行中輸出當天開門和鎖門的人員的ID_number。這兩個ID_number必須用一個空格隔開。
注意:保證記錄一致。也就是說,每個人的簽到時間必須早於簽退時間,並且沒有兩個人同時簽到或簽退。
樣例輸入
3
CS301111 15:30:28 17:00:10
SC3021234 08:00:00 11:25:25
CS301133 21:45:00 21:58:40
樣例輸出
SC3021234 CS301133
解題思路
輸入時間時可以選擇使用C語言的輸入函數,如scanf("%d:%d:%d", &s, &h, &s)
。
計算最早與最晚時間時可以選擇將時間轉變爲秒
爲單位,然後再進行比較,會更簡單。
AC代碼
#include <iostream>
#include <cstdio>
using namespace std;
const int INF = 60 * 60 * 24 + 100;
int main() {
int m;
cin >> m;
string st_name, ed_name;
int start = INF;
int end = -1;
for(int i = 0; i < m; i++) {
string name;
int sh, sm, ss, eh, em, es;
cin >> name;
scanf("%d:%d:%d %d:%d:%d", &sh, &sm, &ss, &eh, &em, &es);
int st = sh * 3600 + sm * 60 + ss;
int ed = eh * 3600 + em * 60 + es;
if(start > st) {
start = st;
st_name = name;
}
if(end < ed) {
end = ed;
ed_name = name;
}
}
cout << st_name << ' ' << ed_name << endl;
return 0;
}