PAT (Advanced Level) Practice 1121 Damn Single (25 分) 凌宸1642

PAT (Advanced Level) Practice 1121 Damn Single (25 分) 凌宸1642

题目描述:

"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 (≤ 50,000), 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 (≤ 10,000) 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.

译:每个输入文件包含一个测试用例。 对于每种情况,第一行给出一个正整数 N(≤ 50,000),即夫妻总数。 然后是 N 行情侣,每行给出一对 5 位数字的 ID(即从 00000 到 99999)。 在情侣名单之后,有一个正整数M(≤ 10,000),后面是派对客人的M ID。 数字以空格分隔。 保证没有人有重婚(重婚)或与一个以上的同伴晃来晃去。


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.

译:首先在一行中打印孤独客人的总数。 然后在下一行,按升序打印他们的 ID。 数字必须正好由 1 个空格分隔,并且行尾不得有多余的空格。


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

The Idea:

  • 其实这里只需要用 map 容器即可。
  • 首先标记所有的有对象的人,然后在输入宴会人员时,判断其是否为单身狗,只需要首先判断在 map 中是否有它的映射记录,如果没有则一定是单身狗,还有就是根据测试用例中可以看出,当有对象的人参加宴会,如果其对象不在场,也是要当成单身狗来计算的。

The Codes:

#include<bits/stdc++.h>
using namespace std ;
const int maxn = 100010 ;
map<int , int> cp ;
bool come[maxn] ; 
int n , m , a , b , t ;
vector<int> ans , co ;
int main(){
	cin >> n ;
	for(int i = 0 ; i < n ; i ++){
		cin >> a >> b ;
		cp[a] = b ;      // 记录 a 和 b 互为对象
		cp[b] = a ;
	}
	cin >> m ;
	for(int i = 0 ; i < m ; i ++){
		cin >> t ;
		co.push_back(t) ;
		come[t] = true ;
	}
	for(int i = 0 ; i < co.size() ; i ++){
		if(cp.count(co[i]) == 0) ans.push_back(co[i]) ;  // 没对象 
		else if(come[cp[co[i]]] == false) ans.push_back(co[i]) ; // 对象没来 
	}
	cout << ans.size() << endl ;
	sort(ans.begin() , ans.end()) ;  // 根据要求,按 ID 的非递减序列排序
	for(int i = 0 ; i < ans.size() ; i ++)
		printf("%05d%c" , ans[i] , ((i == ans.size() - 1)?'\n':' ') ) ;
	return 0 ;
} 
上一篇:Docker(16)- docker cp 命令详解


下一篇:Linux环境文件或文件夹的复制命令