"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这个题我用了一个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;
}