​1006 Sign In and Sign Out (25分)​

题目

给出每个人来和走的时间(时:分:秒),输出最早来和最晚走的人的名字。

分析

直接根据题意模拟即可。写两个比较函数分别以来和走的时间排个序。

#include <bits/stdc++.h>
using namespace std;
#define db(x) cout<<x<<endl

typedef long long ll;
const int INF = 0x3f3f3f3f;
const int N = 1e5 + 10;
const ll mod = 2147483648;

struct node {
char str[20];
int fo, fm, fs;
int lo, lm, ls;
} a[N];

int n;

bool cmp1(node a, node b) {
if (a.fo == b.fo) {
if (a.fm == b.fm) return a.fs < b.fs;
return a.fm < b.fm;
}
return a.fo < b.fo;
}

bool cmp2(node a, node b) {
if (a.lo == b.lo) {
if (a.lm == b.lm) return a.fs < b.fs;
return a.lm < b.lm;
}
return a.lo < b.lo;
}

int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s", a[i].str);
scanf("%d:%d:%d %d:%d:%d", &a[i].fo, &a[i].fm, &a[i].fs, &a[i].lo, &a[i].lm, &a[i].ls);
}
sort(a, a + n, cmp1);
printf("%s ", a[0].str);
sort(a, a + n, cmp2);
printf("%s\n", a[n - 1].str);
return 0;
}