PTA 1065 单身狗 (25 分) C++实现

Posted Crazy.宥思

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PTA 1065 单身狗 (25 分) C++实现相关的知识,希望对你有一定的参考价值。

1065 单身狗 (25 分)

“单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱。

输入格式:

输入第一行给出一个正整数 N(≤ 50 000),是已知夫妻/伴侣的对数;随后 N 行,每行给出一对夫妻/伴侣——为方便起见,每人对应一个 ID 号,为 5 位数字(从 00000 到 99999),ID 间以空格分隔;之后给出一个正整数 M(≤ 10 000),为参加派对的总人数;随后一行给出这 M 位客人的 ID,以空格分隔。题目保证无人重婚或脚踩两条船。

输出格式:

首先第一行输出落单客人的总人数;随后第二行按 ID 递增顺序列出落单的客人。ID 间用 1 个空格分隔,行的首尾不得有多余空格。

输入样例:

3
11111 22222
33333 44444
55555 66666
7
55555 44444 10000 88888 22222 11111 23333
结尾无空行

输出样例:

5
10000 23333 44444 55555 88888
结尾无空行

解题思路:

先利用数组或map容器建立情侣数之间的对应关系,再将参加派对的人数作为数组的下标来找是否有相应的对应关系,如果没有,则代表它为单身狗
Tips:每人对应一个 ID 号,为 5 位数字(从 00000 到 99999),这时的输出有两种处理:
①将输入的id号看成是字符串,输出的时候就按原字符串输出即可
②id号不看成字符串就看成纯数字,但是输出的时候要用printf("%05d",x);这种格式

代码示例(第①种处理,超时):

#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <string>
#include <cmath>
#include <numeric>
#include <map>

using namespace std;

int main()
{
	int n;
	cin >> n; //情侣总数

	map<string, string> lovers; //建立情侣数对应关系
	for (int i = 0; i < n; i++)
	{
		string mate1, mate2;
		cin >> mate1 >> mate2;

		lovers[mate1] = mate2;
		lovers[mate2] = mate1;
	}

	int total; //参加派对的总人数
	cin >> total;

	vector<string> res;
	for (int i = 0; i < total; i++)
	{
		string temp;
		cin >> temp;
		res.push_back(temp);
	}

	//将参加派对的数字按升序排序,便于后续处理
	sort(res.begin(), res.end()); 

	vector<string> ans; //存单身数字
	for (int i = 0; i < res.size(); i++)
	{
		int key = 0; //标记是否单身(为1不单身,为0单身)
		for (int j = 0; j < res.size(); j++)
		{
			if (lovers[res[i]] == res[j])
			{
				key = 1;
				break;
			}
		}

		if (key == 0)
		{
			ans.push_back(res[i]);
		}
	}

	cout << ans.size() << endl; //输出单身总数
	int flag = 1; //输出控制
	for (int i = 0; i < ans.size(); i++)
	{
		if (flag > 1)
		{
			cout << " ";
		}
		cout << ans[i];
		flag++;
	}
}

运行结果:

代码示例(第②种处理,完美通过):

#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <string>
#include <cmath>
#include <numeric>
#include <map>

using namespace std;

int main()
{
	int n;
	cin >> n; //情侣总数

	vector<int> lovers(100005, -1); //建立情侣数对应关系
	for (int i = 0; i < n; i++)
	{
		int mate1, mate2;
		cin >> mate1 >> mate2;

		lovers[mate1] = mate2;
		lovers[mate2] = mate1;
	}

	int total;
	cin >> total; //参加派对的总人数

	vector<int> res;
	for (int i = 0; i < total; i++)
	{
		int temp;
		cin >> temp;
		res.push_back(temp);
	}
	
	//将参加派对的数字按升序排序,便于后续处理
	sort(res.begin(), res.end());

	vector<int> ans; //存单身数字
	for (int i = 0; i < res.size(); i++)
	{
		int key = 0;
		for (int j = 0; j < res.size(); j++)
		{
			if (lovers[res[i]] == res[j])
			{
				key = 1;
				break;
			}
		}

		if (key == 0)
		{
			ans.push_back(res[i]);
		}
	}

	cout << ans.size() << endl; //输出单身总数
	int flag = 1; //输出控制
	for (int i = 0; i < ans.size(); i++)
	{
		if (flag > 1)
		{
			cout << " ";
		}
		printf("%05d",ans[i]);
		flag++;
	}
}

运行结果:

明天就是七夕节了,先提前祝大家七夕快乐!热闹是你们的,而我就是那个单身狗🐕

以上是关于PTA 1065 单身狗 (25 分) C++实现的主要内容,如果未能解决你的问题,请参考以下文章

1065 单身狗 (25分)

PAT Basic 1065 单身狗 (25 分)

PAT乙级1065 单身狗 (25 分)

1065 单身狗 (25 分)(map+set+vector)

1065. 单身狗(25)

1065. 单身狗(25)