PAT--1006 Sign In and Sign Out (25 分)

版权声明:未经过本人同意不得转发 https://blog.csdn.net/weixin_42956785/article/details/84677328

1006 Sign In and Sign Out (25 分)

At the beginning of every day, the first person who signs in the computer room will unlock the door, and the last one who signs out will lock the door. Given the records of signing in’s and out’s, you are supposed to find the ones who have unlocked and locked the door on that day.

Input Specification:
Each input file contains one test case. Each case contains the records for one day. The case starts with a positive integer M, which is the total number of records, followed by M lines, each in the format:

ID_number Sign_in_time Sign_out_time
where times are given in the format HH:MM:SS, and ID_number is a string with no more than 15 characters.

Output Specification:
For each test case, output in one line the ID numbers of the persons who have unlocked and locked the door on that day. The two ID numbers must be separated by one space.

Note: It is guaranteed that the records are consistent. That is, the sign in time must be earlier than the sign out time for each person, and there are no two persons sign in or out at the same moment.

Sample Input:
3
CS301111 15:30:28 17:00:10
SC3021234 08:00:00 11:25:25
CS301133 21:45:00 21:58:40
Sample Output:
SC3021234 CS301133

译文:

在每天的开始,第一个登录计算机房的人将打开门,最后一个登出的人将锁门。鉴于登录和退出的记录,你应该找到那天解锁并锁上门的人。

输入规格:
每个输入文件包含一个测试用例。每个案例包含一天的记录。案例以正整数开头M,即记录总数,后跟M行,每行格式如下:
ID_number Sign_in_time Sign_out_time
其中时间以格式给出HH:MM:SS,并且ID_number是一个不超过15个字符的字符串。

输出规格:
对于每个测试用例,在一行中输出当天解锁并锁上门的人的ID号。两个ID号必须用一个空格分隔。

注意: 保证记录一致。也就是说,登录时间必须早于每个人的退出时间,并且在同一时刻没有两个人登录或退出。

样本输入:
3
CS301111 15:30:28 17:00:10
SC3021234 08:00:00 11:25:25
CS301133 21:45:00 21:58:40
样本输出:
SC3021234 CS301133

笔记: 其实这题真的很水,将sign in时间排序一下,再将sign out时间排序一下就OK了,完全没有什么难度。使用STL容器map后,他会自动key排序,这样就减少了我们很多时间。
满分代码:

#include<cstdio>
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main()
{
	int n;
	scanf("%d", &n);
	map<string, string>signIn;
	map<string, string>signOut;
	//数据读入
	for (int i = 0; i < n; i++)
	{
		string name, in, out;
		cin >> name >> in >> out;
		signIn[in] = name;
		signOut[out] = name;
	}
	//数据输出
	map<string, string>::iterator it;
	it = signIn.begin();
	cout << it->second<<" ";
	it = signOut.end();
	it--;
	cout << it->second << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42956785/article/details/84677328