考查set的模板题
要注意的地方是查询两个集合中是否有相同元素时,可以只用一次循环,同时利用find函数来实现。如果使用map来映射会超时。
注意:
1.set也有数组形式
2.set遍历时只能迭代
3.迭代取值用*it

#include<cstdio>
#include<set>
#include<iostream>
#include<map>
using namespace std;
const int maxn=55;
int main(){
	set<int> st[maxn];
	int n,m,num;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&m);
		for(int j=0;j<m;j++){
			scanf("%d",&num);
			st[i].insert(num);
		}
	}
	int k,u,v;
	scanf("%d",&k);
	for(int i=0;i<k;i++){
		scanf("%d%d",&u,&v);
		set<int>::iterator it;
		int cnt=0,t = st[v].size();
		for(it=st[u].begin();it!=st[u].end();it++){ //这里容易在it 前面写int
			if(st[v].find(*it) != st[v].end()) cnt++;  //这里容易错
			else t++;
		}
		printf("%.1f%%\n",cnt*100.0/t);
	}
	return 0;
}