题目大意:
给你一个签到记录表,输出最早到来和最晚离开的学生学号。
解题思路:
模拟,更新最大值最小值即可。
代码如下:
#include<iostream>
#include<cstdio>
#include<fstream>
#include<set>
#include<cmath>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<iomanip>
#include<cstdlib>
#include<list>
#include<queue>
#include<stack>
#include<algorithm>
#define inf 0x3f3f3f3f
#define MOD 1000000007
#define mem0(a) memset(a,0,sizeof(a))
#define mem1(a) memset(a,-1,sizeof(a))
#define meminf(a) memset(a,inf,sizeof(a))
//vector ::iterator it;
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
struct record
{
char id[20];
int bh,bm,bs;
int eh,em,es;
}r[1010];
int main()
{
//std::ios::sync_with_stdio(false);
// cin.tie(0);
//freopen("test.txt","r",stdin);
// freopen("output.txt","w",stdout);
int n;
int mi=inf,ma=0;
char id1[20]={0},id2[20]={0};
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%s %d:%d:%d %d:%d:%d",&r[i].id,&r[i].bh,&r[i].bm,&r[i].bs,&r[i].eh,&r[i].em,&r[i].es);
int tim1=r[i].bh*3600+r[i].bm*60+r[i].bs;
int tim2=r[i].eh*3600+r[i].em*60+r[i].es;
if(tim1<mi)//更新最早来的
{
mi=tim1;
strcpy(id1,r[i].id);
}
if(tim2>ma)//更新最迟走的
{
ma=tim2;
strcpy(id2,r[i].id);
}
}
cout<<id1<<' '<<id2<<endl;
return 0;
}