【PAT 甲级】1006 Sign In and Sign Out (25分) (模拟)
原创
©著作权归作者所有:来自51CTO博客作者stormjing的原创作品,请联系作者获取转载授权,否则将追究法律责任
题目
给出每个人来和走的时间(时:分:秒),输出最早来和最晚走的人的名字。
分析
直接根据题意模拟即可。写两个比较函数分别以来和走的时间排个序。
#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;
}