Nc:两个集合共有的不同数的个数,其实就是检查去重后,两个集合相等数的个数
Nt:两个集合中不同数的个数,其实就是去重后有多少个数
#include <iostream>
#include <unordered_set>
#include <unordered_map>
using namespace std;
int main()
{
int n,k;
cin >> n;
unordered_map<int,unordered_set<int>>mp;
for(int i = 1; i <= n; i ++)
{
cin >> k;
while(k --)
{
int a;
cin >> a;
mp[i].insert(a);
}
}
cin >> k;
while(k --)
{
int a,b;
cin >> a >> b;
int cnt1 = 0,cnt2 = 0;
for(auto it : mp[a])
{
if(mp[b].count(it)) cnt1 ++; //相同
}
cnt2 = mp[a].size() + mp[b].size() - cnt1;//总的个数-相同的个数 = 总的不同的
printf("%.1lf%%\n",cnt1 * 100.0 / cnt2);
}
return 0;
}