#include<iostream> #include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #include<algorithm> #include<map> #include<vector> #include<queue> #include<set> using namespace std; //用set去重,查看x集合某元素在y集合中是否出现 //用if st[y].find(*it) !=st[y].end,如果能fine得到会返回对应值的迭代器 const int N=51; set<int> st[N]; //N个集合 void compare(int x,int y){ //比较集合st[x]与集合st[y] int totalNum=st[y].size(),sameNum=0; //不同数的个数、相同数的个数 //遍历集合st[x] for(set<int>::iterator it=st[x].begin(); it != st[x].end(); it++){ if(st[y].find(*it) != st[y].end()) sameNum++; //在st[y]中能找到该元素 else totalNum++; //在st[y]中不能找到该元素 } printf("%.1f%%\n",sameNum*100.0 /totalNum); //输出比率 } int main(){ int n,k,q,v,st1,st2; scanf("%d",&n); //集合个数 for(int i=1;i<=n;i++){ scanf("%d",&k); //集合i中的元素个数 for(int j=0;j<k;j++){ scanf("%d",&v); //集合i中的元素v st[i].insert(v); //将元素v加入集合st[i]中 } } scanf("%d",&q); //q个查询 for(int i=0;i<q;i++){ scanf("%d%d",&st1,&st2); //欲对比的集合编号 compare(st1,st2); //比较两个集合 } system("pause"); return 0; }