题目1013:开门人和关门人
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:6456
解决:3242
-
题目描述:
-
每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。现有一堆杂乱的机房签到、签离记录,请根据记录找出当天开门和关门的人。
-
输入:
-
测试输入的第一行给出记录的总天数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
-
-
输入有多组数据。。。一直卡在这。。。也是服自己
#include <stdio.h> #include <iostream> #include <stack> #include <string.h> #include <queue> #include <cmath> #include <vector> #include <algorithm> #include <map> #include <set> #include <string> using namespace std; typedef long long LL; struct Node { char num[20]; int hour_in; int minute_in; int second_in; int hour_out; int minute_out; int second_out; }; Node node[200]; bool cmp1(Node a, Node b) { if(a.hour_in != b.hour_in) { return a.hour_in < b.hour_in; } else if(a.minute_in != b.minute_in) { return a.minute_in < b.minute_in; } else if(a.second_in != b.second_in) { return a.second_in < b.second_in; } } bool cmp2(Node a, Node b) { if(a.hour_out != b.hour_out) { return a.hour_out > b.hour_out; } else if(a.minute_out != b.minute_out) { return a.minute_out > b.minute_out; } else if(a.second_out != b.second_out) { return a.second_out > b.second_out; } } int main() { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); int N; while(scanf("%d",&N) != EOF) { while(N--) { int M; cin >> M; for(int i = 0; i < M; i++) { //cin >> node[i].num; scanf("%s %d:%d:%d %d:%d:%d", node[i].num, &node[i].hour_in, &node[i].minute_in, &node[i].second_in, &node[i].hour_out, &node[i].minute_out, &node[i].second_out); } sort(node, node + M, cmp1); printf("%s ", node[0].num); sort(node, node + M, cmp2); printf("%s\n", node[0].num); } } return 0; } /************************************************************** Problem: 1013 User: Crazy_man Language: C++ Result: Accepted Time:0 ms Memory:1536 kb ****************************************************************/
本文介绍了一道关于记录机房开门与关门人的程序题,通过对签到和签离时间的比较,找出每天最早到达及最晚离开机房的人员。文章提供了完整的C++实现代码,并通过样例说明了如何正确处理输入输出。
824

被折叠的 条评论
为什么被折叠?



