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 23333Sample Output:
5 10000 23333 44444 55555 88888
思路
给你n对情侣的代号以及一场派对的代号名单,找出名单中的单身狗(情侣中只要有一个没在也算),代号升序输出。
1.用一个isExist数组标记伴侣的存在,比如isExist[i] == 1 表示代号为i的人的伴侣也在派对上。
2.用couple数组关联两个人,guest数组记录在排队上的人。
3.遍历guest进行相关处理即可。
注意:1)用map关联一对情侣会超时,改用数组直接关联。
2)set的迭代器如果先被声明在循环外部(处理第一个数据的空格字符),然后再进入迭代循环会超时,所以得直接在迭代内部声明迭代器。
(这个问题不是很清楚出在哪,猜测可能跟迭代器的构造有关)
代码
#include <cstdio> #include <set> #include <vector> using namespace std; int main() { int n, a, b, m; scanf("%d", &n); vector<int> couple(100000); for (int i = 0; i < 100000; i++) couple[i] = -1; for (int i = 0; i < n; i++) { scanf("%d%d", &a, &b); couple[a] = b; couple[b] = a; } scanf("%d", &m); vector<int> guest(m), isExist(100000); for (int i = 0; i < m; i++) { scanf("%d", &guest[i]); if (couple[guest[i]] != -1) { isExist[couple[guest[i]]] = 1; } } set<int> s; for (int i = 0; i < m; i++) { if (!isExist[guest[i]]) { s.insert(guest[i]); } } printf("%d ", s.size()); for (set<int>::iterator it = s.begin(); it != s.end(); it++) { if (it != s.begin()) printf(" "); printf("%05d", *it); } return 0; }