题目
每天第一个到机房的人负责开门,最后一个从机房离开的人负责锁门。
现在,给定每个人的签到与签出记录,请你找出当天开门的人以及锁门的人分别是谁。
输入格式
第一行包含整数 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

解法:模拟

时间复杂度O(n),空间复杂度O(1)
这里时间的大小关系恰好满足字典序,所以直接按照字符串比较大小即可

  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4. int m;
  5. cin >> m;
  6. string id_in, id_out;
  7. string time_in = "24:00:00", time_out = "00:00:00";
  8. string id, in, out;
  9. while (m--) {
  10. cin >> id >> in >> out;
  11. if (in < time_in) {
  12. time_in = in;
  13. id_in = id;
  14. }
  15. if (time_out < out) {
  16. time_out = out;
  17. id_out = id;
  18. }
  19. }
  20. cout << id_in << ' ' << id_out;
  21. return 0;
  22. }