给出 n 个人的 ID 、sign in 时间 、sign out 时间,求最早进入的 ID 和最迟离开的的 ID
(一)记录下所有访客的信息,进行排序
注意:sort ( first , last , cmp ) 的排序区间为 [ first , last )
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN 1000
typedef struct person{
char s[15];
int inhour,inminute,insecond;
int outhour,outminute,outsecond;
}visitor;
bool cmp1(visitor a,visitor b){
if(a.inhour != b.inhour) return a.inhour < b.inhour;
else{
if(a.inminute != b.inminute) return a.inminute < b.inminute;
else return a.insecond < b.insecond;
}
}
bool cmp2(visitor a,visitor b){
if(a.outhour != b.outhour) return a.outhour > b.outhour;
else{
if(a.outminute != b.outminute) return a.outminute > b.outminute;
else return a.outsecond > b.outsecond;
}
}
int main(){
int n;
scanf("%d",&n);
visitor v[MAXN];
for(int i=0;i<n;i++){
scanf("%s %d:%d:%d %d:%d:%d",v[i].s,&v[i].inhour,&v[i].inminute,&v[i].insecond,&v[i].outhour,&v[i].outminute,&v[i].outsecond);
}
sort(v,v+n,cmp1);
printf("%s ",v[0].s);
sort(v,v+n,cmp2);
printf("%s",v[0].s);
}
(二)时间转换为总秒数,最早和最迟的时间保存在变量 mintime 和maxtime 中,并同时保存当前最早和最迟的 ID
#include <iostream>
#include <climits> // 定义了 INT_MAX 和 INT_MIN
using namespace std;
int main() {
int n, mintime = INT_MAX, maxtime = INT_MIN;
cin >> n;
string minID,maxID;
for(int i = 0; i < n; i++) {
string t;
cin >> t;
int inh,inm,ins,outh,outm,outs;
scanf("%d:%d:%d %d:%d:%d",&inh,&inm,&ins,&outh,&outm,&outs);
int InS = inh * 3600 + inm * 60 + ins;
int OutS = outh * 3600 + outm * 60 + outs;
if(InS < mintime) {
mintime = InS;
minID = t;
}
if (OutS > maxtime) {
maxtime = OutS;
maxID = t;
}
}
cout << minID << " " << maxID;
}