考查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;
}