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 (≤ 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.
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
坑点:
-
00000 (第二个测试点)
-
输出位数不足5位 (第五个测试点)
-
运行超时问题
#include<bits/stdc++.h>
using namespace std;
unordered_map<int,int> mp;
unordered_map<int,int> mi;
set<int> st;
int n,k;
int va1,va2,peo;
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d %d",&va1,&va2);
mp[va1]=va2;
mp[va2]=va1;
}
scanf("%d",&k);
for(int i=0;i<k;i++){
scanf("%d",&peo);
if(mp[peo]==0 && mp[0]!=peo){
st.insert(peo);
}else{
if( mi[mp[peo]]==0) mi[peo]=1;
else mi[mp[peo]]=0;
}
}
for(auto it=mi.begin();it!=mi.end();it++){
if(it->second==1)st.insert(it->first);
}
printf("%d\n",st.size());
for(auto it=st.begin();it!=st.end();it++){
if(it==st.begin())cout<<setw(5)<<setfill('0')<<*it;
else cout<<" "<<setw(5)<<setfill('0')<<*it;
}
return 0;
}