1121 Damn Single(25 分)(PAT甲級)
題目描述:
"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
程式碼如下:
#include <iostream> #include <vector> #include <algorithm> #include <cstdlib> #include <map> #include <string> using namespace std; const int maxn = 50010; int s3[maxn]; vector<int> res; struct node { //flag表示是否為夫妻,com表示是否來這次聚會(因為夫妻都來聚會才算) int num; int flag; int com; node() { num = 0; flag = 0; com = 0; } }; map<int, node> mp; int main() { int s1, s2; int n, m, index = 0, vaule; cin >> n; for (int i = 0; i < n; i++) { //輸入夫妻,並標記flag cin >> s1 >> s2; mp[s1].num = s2; mp[s2].num = s1; mp[s1].flag = 1; mp[s2].flag = 1; } cin >> m; for (int i = 0; i < m; i++) { cin >> vaule; if (mp[vaule].flag == 0) //如果沒有物件,直接存入結果 res.push_back(vaule); else { s3[index++] = vaule; //否則存入中間陣列,並標記com mp[vaule].com = 1; } } for (int i = 0; i < index ; i++) { if (mp[s3[i]].com == 1 && mp[mp[s3[i]].num].com == 1) continue; //如果夫妻都來了,跳過這輪迴圈,否則存入結果 else res.push_back(s3[i]); } sort(res.begin(), res.end()); printf("%d\n", res.size()); for (int i = 0; i < res.size(); i++) { printf("%05d", res[i]); if (i < res.size() - 1) printf(" "); } system("pause"); return 0; }