我本来以为会出现2004和-2004的情况,但其实题目的意思是编号其实是惟一的,区别男女的不过是前面的正负号。
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <unordered_map>
using namespace std;
const int maxv=10010;
vector<int> v[maxv];
unordered_map<int,int> mp;
struct node{
int lover,belover;
};
bool cmp(node a,node b){
if(a.lover!=b.lover){
return a.lover<b.lover;
}else{
return a.belover<b.belover;
}
}
int main(){
int n,m;
scanf("%d %d",&n,&m);
for(int i=0;i<m;i++){
string friend1,friend2;
cin>>friend1>>friend2;
int a=abs(stoi(friend1));
int b=abs(stoi(friend2));
if(friend1.length()==friend2.length()){
v[a].push_back(b);
v[b].push_back(a);
}
mp[a*10000+b]=mp[b*10000+a]=1;
}
int k;
scanf("%d",&k);
for(int i=0;i<k;i++){
vector<node> helper;
int lover1,lover2;
scanf("%d %d",&lover1,&lover2);
int a=abs(lover1),b=abs(lover2);
for(int j=0;j<v[a].size();j++){
for(int k=0;k<v[b].size();k++){
if(v[a][j]==b||v[b][k]==a){
continue;
}
if(mp[v[a][j]*10000+v[b][k]]==1){
helper.push_back(node{v[a][j],v[b][k]});
}
}
}
sort(helper.begin(),helper.end(),cmp);
printf("%d\n",helper.size());
for(int j=0;j<helper.size();j++){
printf("%04d %04d\n",helper[j].lover,helper[j].belover);
}
}
return 0;
}