利用stl中的set做就好
技巧:两个集合的元素总个数=两个集合个数相加减去相同元素的个数
#include <bits/stdc++.h>
using namespace std;
const int N = 55;
set<int> S[N];
int main(void)
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
int k;
cin >> k;
for (int j = 0; j < k; j++)
{
int x;
scanf("%d", &x);
S[i].insert(x);
}
}
int m;
cin >> m;
while (m--)
{
int a, b;
scanf("%d %d", &a, &b);
int cntA = S[a].size();
int cntB = S[b].size();
set<int>::iterator it;
int cnt = 0;
for (it = S[a].begin(); it != S[a].end(); it++)
{
if (S[b].find(*it) != S[b].end())
{
cnt++;
}
}
int sum = cntA + cntB - cnt;
double res = cnt * 1.0 / sum;
res *= 100;
printf("%.2f%%\n",res);
}
return 0;
}