原题链接:
代码:
#include <iostream>
#include <set>
#include <algorithm>
#include <iomanip>
using namespace std;
#define endl '\n'
int N, K;
set<int> s[51];
void getSimilarity() {
int a, b;
cin >> a >> b;
if (s[a].size() > s[b].size()) {
swap(a, b);
}
int Nc = 0, Nt = s[a].size() + s[b].size();
for (auto it = s[a].begin();it != s[a].end(); it++) {
if (s[b].count(*it)) {//有相同
Nc++;
Nt--;
}
}
double similarity = (double)Nc / Nt * 100;
cout << fixed << setprecision(1) << similarity;
cout << "%" << endl;
}
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> N;
for (int i = 1; i <= N; i++) {
int M;
cin >> M;
for (int j = 0; j < M; j++) {
int temp;
cin >> temp;
s[i].insert(temp);
}
}
cin >> K;
for (int i = 0; i < K; i++) {
getSimilarity();
}
return 0;
}