1121. Damn Single (25)

"Damn Single (单身狗)" is the Chinese nickname for someone who is being single. You are supposed to find those who are alone in a big party, so they can be taken care of.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (<=50000), the total number of couples. Then N lines of the couples follow, each gives a couple of ID's which are 5-digit numbers (i.e. from 00000 to 99999). After the list of couples, there is a positive integer M (<=10000) followed by M ID's of the party guests. The numbers are separated by spaces. It is guaranteed that nobody is having bigamous marriage (重婚) or dangling with more than one companion.

Output Specification:

First print in a line the total number of lonely guests. Then in the next line, print their ID's in increasing order. The numbers must be separated by exactly 1 space, and there must be no extra space at the end of the line.

Sample Input:
3
11111 22222
33333 44444
55555 66666
7
55555 44444 10000 88888 22222 11111 23333
Sample Output:
5
10000 23333 44444 55555 88888
这个题我用了一个map关联容器M,每次输入一对couple就将对应的值存入关联容器中,例如输入11111 22222  那么M[11111]=22222,M[222222]=11111

然后用一个vector容器盛ds 盛放单身狗,每次输入一个顾客,都要去ds容器里检索一遍,看看有没有这个顾客的老伴(哈哈),如果没有,说明可能是单身狗, 就把这个

顾客放到单身狗容器ds里,如果检索到,说明是一对couple来到了party就将 顾客的老伴删掉。直到最后输入完,ds里的存的就是单身狗,排个序输出就行了

例如:

拿上面例子来说,当输入顾客55555是,ds为空,直接插入,输入44444时,ds里没有44444的老伴(虽然他有老伴,但目前已经检索的名单中没有出现),所以插入,输入10000 88888 22222ds里没有他们的老伴都插入,当输入11111时,在ds里检索到22222,11111和22222是couple,所以就把ds里的22222删掉,11111不插入ds,往后23333插入,输入完成后ds里有数55555 44444 10000 88888 23333,再排个序就行了。

#include <iostream> 
#include <vector>
#include <map> 
#include <algorithm>  
using namespace std;  
map<int,int>M;
vector<int> ds;
bool Iscouple(int start,int end,int x)//检索顾客的老伴是否在ds里
{
	for(int i=start;i<end;i++)
		if(ds[i]==x)
			return true;
	return false;
}
int main() {  
   	int n,m,cp1,cp2,guest;
   	cin>>n;
   	for(int i=0;i<n;i++)
   	{
   		cin>>cp1>>cp2;
		M[cp1]=cp2;
		M[cp2]=cp1;	
	}
	cin>>m;
	for(int i=0;i<m;i++)
	{
		cin>>guest;
		if(!Iscouple(0,ds.size(),M[guest]))//如果顾客的老伴不在ds里,就把顾客加入单身狗名单
			ds.push_back(guest);
		else
			ds.erase(find(ds.begin(),ds.end(),M[guest]));//如果在,把这个顾客的老伴从ds中删除
	}
	sort(ds.begin(),ds.end());//排个序
	cout<<ds.size()<<endl;
	for(int i=0;i<ds.size();i++)
	{
		if(i==0)
			printf("%05d",ds[i]);//注意最后不够5位要补0
		else
			printf(" %05d",ds[i]);
	}
    return 0;  
}  




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值