题目描述
每天第一个到机房的人负责开门,最后一个从机房离开的人负责锁门。
现在,给定每个人的签到与签出记录,请你找出当天开门的人以及锁门的人分别是谁。
输入格式
第一行包含整数 M,表示共有 M 个人的签到签出记录。
接下来 M 行,每行的形式如下:
ID_number Sign_in_time Sign_out_time
时间以 HH:MM:SS 形式给出,ID_number 是一个长度不超过 15 的字符串。
输出格式
共一行,输出开门人和锁门人的ID_number,用一个空格隔开。
数据范围
1≤M≤10,
数据保证每个人的签到时间早于签出时间,并且不会出现两个人同时签到或同时签出的情况。
样例
输入样例:
3
CS301111 15:30:28 17:00:10
SC3021234 08:00:00 11:25:25
CS301133 21:45:00 21:58:40
输出样例:
SC3021234 CS301133
算法1
(暴力枚举) $O(n^2)$
时间复杂度
参考文献
C++ 代码
#include<bits/stdc++.h>
using namespace std;
unordered_map<string,string>hin;
unordered_map<string,string>hout;
const int N=100;
string pe[N];
string forma(string str)
{
string t="";
t+=str.substr(0,2)+str.substr(3,2)+str.substr(6,2);
return t;
}
int m;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>m;
for(int i=0;i<m;i++)
{
string peo,in,out;
cin>>peo>>in>>out;
in=forma(in);
out=forma(out);
hin[in]=peo;
hout[out]=peo;
}
int cnt1=0;
for(auto x:hin)
{
pe[cnt1++]=x.first;
}
sort(pe,pe+cnt1);
cout<<hin[pe[0]]<<" ";
cnt1=0;
for(auto x:hout)
{
pe[cnt1++]=x.first;
}
sort(pe,pe+cnt1);
cout<<hout[pe[cnt1-1]];
return 0;
}