set需要注意不能按照数组的方式访问,判断是否相等要通过find函数判断找到该值时是否走到的set的最末尾来判断,另外需要注意本题的i是从0开始的,不是从1开始的。
#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
#include<set>
using namespace std;
set<int> a[51];
int main()
{
int n,k,m,num,set1,set2;
cin>>n;
for (int i=1;i<=n;i++)
{
scanf("%d",&m);
for (int j=0;j<m;j++)
{
scanf("%d",&num);
a[i].insert(num);
}
}
cin>>k;
for (int i=0;i<k;i++)
{
scanf("%d %d",&set1,&set2);
int count1 =0,count2=a[set2].size();
for( set<int>::iterator it= a[set1].begin();it!=a[set1].end();it++)
{
if(a[set2].find(*it)!=a[set2].end())
count1++;
else
count2++;
}
printf("%.1f%%\n",100.0*count1/count2);
}
}