1139 First Contact (30 分)

1139 First Contact (30 分)

解題思想

AC代碼

#include <iostream>
#include <vector>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <string>
using namespace std;
struct peo{
    int id, sex;    //1男 0女
};
struct ret{
    int a, b;
};
bool cmp(ret a, ret b){
    if (a.a != b.a) return a.a < b.a;
    return a.b < b.b;
}
vector<peo> friends[10000];
int main(){
    int n, m, id1, id2, k;
    scanf("%d%d", &n, &m);
    string tmpid1, tmpid2;
    for (int i = 0; i < m; i++){
        cin >> tmpid1 >> tmpid2;
        id1 = stoi(tmpid1);
        id2 = stoi(tmpid2);
        if (tmpid1 == "-0000"){
            friends[abs(id2)].push_back({0, 0});
            friends[0].push_back({abs(id2), id2>0?1:0});
        }
        else if (tmpid2 == "-0000"){
            friends[abs(id1)].push_back({0, 0});
            friends[0].push_back({abs(id1), id1>0?1:0});
        }
        else {
            friends[abs(id1)].push_back({abs(id2), id2>=0?1:0});
            friends[abs(id2)].push_back({abs(id1), id1>=0?1:0});
        }
    }
    scanf("%d", &k);
    while (k--){
        int id1sex, id2sex;
        cin >> tmpid1 >> tmpid2;
        id1 = stoi(tmpid1);
        id2 = stoi(tmpid2);
        if (tmpid1 == "-0000"){
            id1sex = 0;
            id2sex = id2>0?1:0;
        }
        else if (tmpid2 == "-0000"){
            id2sex = 0;
            id1sex = id1>0?1:0;
        }
        else {
            id1sex = id1>=0?1:0;
            id2sex = id2>=0?1:0;
        }
        int aid, bid, pos = 0;
        bool flag = false;
        struct ret rets[90010];
        id1 = abs(id1);
        id2 = abs(id2);
        for (int i = 0; i < int(friends[id1].size()); i++){
            if (friends[id1][i].sex == id1sex && friends[id1][i].id != id2){
                aid = friends[id1][i].id;
                for (int j = 0; j < int(friends[aid].size()); j++){
                    if (friends[aid][j].sex == id2sex
                    && friends[aid][j].id != id1 && friends[aid][j].id != id2){
                        bid = friends[aid][j].id;
                        for (int t = 0; t < int(friends[bid].size()); t++){
                            if (friends[bid][t].id == id2){
                                flag = true;
                                rets[pos].a = aid;
                                rets[pos++].b = bid;
                            }
                        }
                    }
                }
            }
        }
        if (flag){
            sort(rets, rets+pos, cmp);
            printf("%d\n", pos);
            for (int i = 0; i < pos; i++)
                printf("%04d %04d\n", rets[i].a, rets[i].b);
        }
        else printf("0\n");
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章