C++ espionage

题目描述
X 国的情报委员受到一份可靠的消息,信息表明 Y 国将派espionage去窃取 X 国的机密文件。X 国指挥官手中有两份名单列表,一份是 Y 国派往 X 国的espionage名单列表,另一份是 X 国以前派往 Y 国的espionage名单。这两份名单列表可能有些重叠。因为espionage可能同时扮演两个角色,称之“双重espionage”。因此,Y 国可以把双重espionage送回 X 国。很明显,这对 X 国是有利的,因为双重espionage可以把 Y 国的机密文件带回,而不必担心在 Y 国边境被拘留。所以指挥官决定抓住由 Y 国派出的espionage,让普通人和双重espionage进入。那么你能确定指挥官需要抓捕的espionage名单吗?
输入格式
有多组测试数据。
每组数据由四部分组成:
第一部分包含 3 个整数 A、B、C,分别代表进入边境的人数、Y 国将派出的espionage人数,X 国以前派到 Y 国的espionage人数。
第二部分包含 A 个字符串,为进入边境的人员名单。
第三部分包含 B 个字符串,为由 Y 国派出的间谍名单。
第四部分包含 C 个字符串,即双重espionage的名单。
在一份名单中不会有名字重复,如果有重复的名字出现在两份名单中,则表示同一人。
姓名字符串长度不超过 10,
各名单列表最多 500 人。

输出格式
按照列表 B 的出现顺序输出指挥官要抓捕的espionage名单。
如果不应抓捕任何人,则输出 “No enemy spy”。
输入样例
8 4 3
Zhao Qian Sun Li Zhou Wu Zheng Wang
Zhao Qian Sun Li
Zhao Zhou Zheng
2 2 2
Zhao Qian
Zhao Qian
Zhao Qian
输出样例
Qian Sun Li
No enemy spy

知识总结

  1. #include <bits/stdc++.h> C++万能头文件
  2. set集合的方法insert、count
#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n,m,k;
	while(cin>>n>>m>>k)
	{
		string ba[505];
		set<string> a;
		set<string> b;
		set<string> c;
		set<string> d;
		int f=0;
		for(int i=0;i<n;i++)
		{
			string x;
			cin>>x;
			a.insert(x);//入境名单 
		}
		for(int i=0;i<m;i++)
		{
			cin>>ba[i];
			b.insert(ba[i]);//Y国派出的人 
		}
		for(int i=0;i<k;i++)
		{
			string x;
			cin>>x;//X国派出的
			if(b.count(x)==0)
			c.insert(x);//不是双重
			else
			d.insert(x);//是双重
		}
	for(int i=0;i<m;i++)
	{
		if(d.count(ba[i])==0&&a.count(ba[i]))
		{//不是双重且在Y国名单里的必然是真正的espionage
			f=1;
			cout<<ba[i]<<" ";
		}
	}
	if(f)
	cout<<endl;
	else
	cout<<"No enemy spy"<<endl;
	}
	return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值