返回目录![在这里插入图片描述](https://img-blog.csdnimg.cn/20200409172511440.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExOTIwOTkzMTY1,size_16,color_FFFFFF,t_70)
题意
给出n个集合,再进行m次查询,每次查询给出集合编号a和b,求两个集合的交集和并集的元素个数的比率。
样例(可复制)
3
3 99 87 101
4 87 101 5 87
7 99 101 18 5 135 18 99
2
1 2
1 3
//output
50.0%
33.3%
注意点
- 使用printf输出%号的方式是%%
- for(set::iterator it=st[a].begin();it!=st[a].end();it++)声明了一个迭代器,用来遍历集合a
- 同一个集合中有相同的元素,所以最好使用set
#include<bits/stdc++.h>
using namespace std;
set<int> st[51];
void compare(int a,int b){
int sum=st[b].size(),same=0;
for(set<int>::iterator it=st[a].begin();it!=st[a].end();it++){
if(st[b].find(*it)!=st[b].end())same++;
else sum++;
}
printf("%.1f%%\n",same*100.0/sum);
}
int main(){
int n,k,v,st1,st2;
scanf("%d",&n);//集合个数
for(int i=1;i<=n;i++){
scanf("%d",&k);
while(k--){
scanf("%d",&v);
st[i].insert(v);
}
}
scanf("%d",&n);//查询次数
while(n--){
scanf("%d%d",&st1,&st2);
compare(st1,st2);
}
return 0;
}