题目描述
每天第一个到机房的人负责开门,最后一个从机房离开的人负责锁门。
现在,给定每个人的签到与签出记录,请你找出当天开门的人以及锁门的人分别是谁。
输入格式
第一行包含整数 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
考核点 字符串排序
我们可以观察到 如果将时间按照字典序排序
那么最早的时间就是第一个
如果逆序排序 最晚的时间就是第一个
所以使用STL进行时间字符串排序就可以解决该题
C++ 代码
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
vector<string> vv[1010];
int n;
bool sortOut(const vector<string>& a, const vector<string>& b)
{
if (a[2] < b[2]) return false;
return true;
}
bool sortIn(const vector<string>& a, const vector<string>& b)
{
if (a[1] > b[1]) return false;
return true;
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
string name, in, out;
cin >> name >> in >> out;
vv[i].push_back(name);
vv[i].push_back(in);
vv[i].push_back(out);
}
sort(&vv[0], &vv[0] + n, sortIn);
cout << vv[0][0] << " ";
sort(&vv[0], &vv[0] + n, sortOut);
cout << vv[0][0] << endl;
return 0;
}