PAT-乙-1065 1065 單身狗 (25 分)
阿新 • • 發佈:2018-11-03
程式碼
#include <iostream> #include <vector> #include <algorithm> using namespace std; const int MAX = 100000; int main() { int n; scanf("%d", &n); int m[MAX] = {-1}; for(int i=0; i<n; i++) { int a, b; scanf("%d %d", &a, &b); m[a] = b; m[b] = a; } int q; scanf("%d", &q); int vis[MAX] = {0}; for(int i=0; i<q; i++) { int t; scanf("%d", &t); vis[t] = 1; } vector<int> v; for(int i=0; i<MAX; i++) { if(vis[i]) { if(m[i]==-1 || !vis[m[i]]) { v.push_back(i); } } } sort(v.begin(), v.end()); printf("%d\n", v.size()); if(v.size()>0) { printf("%05d", v[0]); for(int i=1; i<v.size(); i++) { printf(" %05d", v[i]); } printf("\n"); } return 0; }
註解
1、int m[MAX] = {-1};
這句始化很重要,因為map預設值為0,如果不進行初始化,當輸入資料有00000時就會有一個case是錯誤!
2、下面這句判斷條件很重要,有兩種條件都是單身狗:
(1)本身就無伴侶
(2)有伴侶,但伴侶沒有來參加
if(m[i]==-1 || !vis[m[i]]) {
v.push_back(i);
}
3、printf(" %05d", v[i]);
這個輸出格式很重要,前導0一定記得不要忘記。
4、<key、value>對的思想要深入人心。m[a]=b,表示a的伴侶是b。
for(int i=0; i<n; i++) { int a, b; scanf("%d %d", &a, &b); m[a] = b; m[b] = a; }