其他分享
首页 > 其他分享> > 1065 单身狗 (25 分)

1065 单身狗 (25 分)

作者:互联网

题目描述:

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

输入格式:

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

 输入样例:

在这里插入图片描述

输出格式:

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

 输出样例:

![![在这里插入图片描述](https://www.icode9.com/i/ll/?i=d5314bbce14e41e4baf2b52fa458d380.png](https://www.icode9.com/i/ll/?i=eb27a0333ad14fab8dbcb72be8889f3d.png

分析: 首先这道题思路很简单:如果参加派对的人没有伴侣或者伴侣不在派对,那么这个人id就是要输出的。设置一个数组arr1:arr1[i]=j表示i的伴侣为j,相应地设置arr1[j]=i。设置数组arr2,arr2[i]=1表示id为i的人在派对,为0表示不在。
遍历所有id(0-99999),找出arr1[i] == -1或者arr1[i]!=-1但arr2[arr1[i]]==0的所有id输出即可。

题目思路很容易想到,但有一些地方要注意。

代码如下:

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
	int i, n, m, t1, t2;
	vector<int> vec, arr1(100000,-1), arr2(100000,0);
	cin>>n;
	for(i = 0; i < n; i++){
		cin>>t1>>t2;
		arr1[t1] = t2;
		arr1[t2] = t1;
	} 
	cin>>m;
	for(i = 0; i < m; i++){
		cin>>t1;
		arr2[t1] = 1;
	}
	for(i = 0; i < 100000; i++){
		if(arr2[i] == 1){
			if(arr1[i] == -1 || (arr1[i] != -1 && arr2[arr1[i]] == 0))
				vec.push_back(i);
		} 
	}
	cout<<vec.size()<<endl;
	sort(vec.begin(), vec.end());
	for(i = 0; i < vec.size(); i++){
		if(i == 0)
			printf("%05d",vec[i]);
		else
			printf(" %05d",vec[i]);
	}
	return 0;
} 






标签:25,单身,1065,t1,arr2,arr1,伴侣,ID,id
来源: https://blog.csdn.net/qq_44587299/article/details/120603470