开门人和关门人
- 题目描述:
-
每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。现有一堆杂乱的机房签到、签离记录,请根据记录找出当天开门和关门的人。
- 输入:
-
测试输入的第一行给出记录的总天数N ( N> 0 ),下面列出了N天的记录。
每天的记录在第一行给出记录的条目数M (M > 0 ),下面是M行,每行的格式为
证件号码 签到时间 签离时间
其中时间按“小时:分钟:秒钟”(各占2位)给出,证件号码是长度不超过15的字符串。
- 输出:
-
对每一天的记录输出1行,即当天开门和关门人的证件号码,中间用1空格分隔。
注意:在裁判的标准测试输入中,所有记录保证完整,每个人的签到时间在签离时间之前,且没有多人同时签到或者签离的情况。
- 样例输入:
-
3 1 ME3021112225321 00:00:00 23:59:59 2 EE301218 08:05:35 20:56:35 MA301134 12:35:45 21:40:42 3 CS301111 15:30:28 17:00:10 SC3021234 08:00:00 11:25:25 CS301133 21:45:00 21:58:40
- 样例输出:
-
ME3021112225321 ME3021112225321 EE301218 MA301134 SC3021234 CS301133
1 #include <cstdlib> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #include <cctype> 6 7 #include <iostream> 8 #include <string> 9 #include <vector> 10 #include <list> 11 #include <deque> 12 #include <set> 13 #include <map> 14 #include <stack> 15 #include <queue> 16 #include <algorithm> 17 18 #define MAXN 100001 19 #define MAXD 99999999 20 using namespace std; 21 22 23 24 struct Re{ 25 string id; 26 27 string st; 28 string et; 29 }a,b; 30 31 32 33 int main() 34 { 35 36 37 char s1[100],s2[100]; 38 39 int i,j,k; 40 41 int n; 42 43 44 scanf("%d",&n); 45 46 47 48 string id; 49 50 string st; 51 string et; 52 53 54 55 while(n--) 56 { 57 58 59 scanf("%d",&k); 60 61 int tag=0; 62 63 64 65 while(k--) 66 { 67 cin>>id>>st>>et; 68 69 if(tag==0) 70 { 71 b.id=a.id=id; 72 b.et=a.et=et; 73 b.st=a.st=st; 74 tag=1; 75 } 76 else 77 { 78 if(st<a.st) 79 {a.st=st;a.id=id;} 80 if(et>b.et) 81 {b.et=et;b.id=id;} 82 } 83 } 84 85 86 cout<<a.id<<' '<<b.id<<endl; 87 } 88 89 90 91 92 93 94 95 96 97 98 return 0; 99 }