PAT乙 1065. 单身狗

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Invokar/article/details/79946920

1065. 单身狗(25)

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

输入格式:

输入第一行给出一个正整数N(<=50000),是已知夫妻/伴侣的对数;随后N行,每行给出一对夫妻/伴侣——为方便起见,每人对应一个ID号,为5位数字(从00000到99999),ID间以空格分隔;之后给出一个正整数M(<=10000),为参加派对的总人数;随后一行给出这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 8888
8

解题思路:

这题我用了四个数组来存储信息,来换取时间上的高效。其中relation:保存夫妻关系 tempRelation:保存输入的人的原有夫妻关系,单向保存。 tempRelation2:保存输入人的ID,方便后面提取 。 tempRelation3:保存单身ID,最后排序输出。其中一定要注意,在初始化数组的时候一定不能初始化为0,因为00000也是一个ID,另外在打印输出结果的时候一定要补0,防止出现00001输出为1的情况。代码中我给了详细注释,应该还是比较好理解的。

程序:

#include <stdio.h>
#include <stdlib.h>
#include <algorithm>

using namespace std;

int main(int argc, char const *argv[])
{
	/*cnt:落单的个数  temp2Idx:tempRelation2的下标*/
	int N, M, cnt = 0, temp2Idx = 0;
	/*relation:保存夫妻关系 tempRelation:保存输入的人的原有夫妻关系,单向保存
	  tempRelation2:保存输入人的ID,方便后面提取  tempRelation3:保存单身ID*/
	long relation[100001] = {100000}, tempRelation[100001] = {100000}, tempRelation2[100001], tempRelation3[100001];
	scanf("%d", &N);
	while (N--)
	{
		long husID, wifeID;		// 丈夫的ID, 妻子的ID
		scanf("\n%ld %ld", &husID, &wifeID);
		/*建立联系*/
		relation[husID] = wifeID;
		relation[wifeID] = husID;
	}
	scanf("\n%d\n", &M);
	for (int i = 0; i < M; i++)
	{
		long ID;
		scanf("%ld",&ID);
		tempRelation2[temp2Idx++] = ID;		// 保存输入的ID,方便后面取
		tempRelation[ID] = relation[ID];	// 首先建立起输入ID的联系
	}
	for (int i = 0; i < temp2Idx; i++)
	{
		long ID = tempRelation2[i];			// 提出ID
		/* 如果当前ID的配偶ID(没有配偶就是100000)在tempRealtion对应不是当前ID,说明就是单身狗*/
		if (tempRelation[relation[ID]] != ID)	
			tempRelation3[cnt++] = ID;		// 把该单身狗加入tempRelation3
	}
	sort(tempRelation3, tempRelation3+cnt);	// 排序
	printf("%d\n", cnt);
	for (int i = 0; i < cnt; i++)			// 格式化输出
	{
		if (i == 0)
			printf("%05ld", tempRelation3[i]);
		else
			printf(" %05ld", tempRelation3[i]);
	}
	return 0;
}
如果对您有帮助,请点个赞哦~
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页