两遍排序, 分别找出in最小值和out最大值
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
struct node{
char id[20];
int hh, mm, ss;
friend bool operator<(const node &a, const node &b) {
if (a.hh == b.hh) {
if (a.mm == b.mm) {
return a.ss < b.ss;
} else
return a.mm < b.mm;
} else
return a.hh < b.hh;
}
};
const int MAXN = 10010;
node in[MAXN], out[MAXN];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
scanf("%s%d:%d:%d", in[i].id, &in[i].hh, &in[i].mm, &in[i].ss);
strcpy(out[i].id, in[i].id);
scanf("%d:%d:%d", &out[i].hh, &out[i].mm, &out[i].ss);
}
sort(in, in+n);
sort(out, out+n);
printf("%s %s\n", in[0].id, out[n-1].id);
}