题目https://pintia.cn/problem-sets/994805342720868352/problems/994805409175420928
C++ set取并集,交集,差集_Jiewang的博客-CSDN博客_c++ set 交集
https://blog.csdn.net/u013095333/article/details/89322501?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161517792216780269824392%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161517792216780269824392&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-1-89322501.pc_search_result_cache&utm_term=c%2B%2B+set%E6%B1%82%E4%BA%A4%E9%9B%86
代码:
#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
int main(){
int n,cnt,t,k;
scanf("%d",&n);
set<int> a[n+1];//n个集合
for(int j=1;j<n+1;j++){
scanf("%d",&cnt);//每个集合的数字个数
for(int i=0;i<cnt;i++){
scanf("%d",&t);
a[j].insert(t);
}
}
scanf("%d",&k);//k个待比较
while(k--){
int p,q;
scanf("%d%d",&p,&q);
int num=a[p].size() +a[q].size();//去重前的总数
set<int> unionn;//合并去重后的集合
/*for(set<int>::iterator it=a[p].begin();it!=a[p].end();it++){
unionn.insert(*it);
} //合并
for(set<int>::iterator it=a[q].begin();it!=a[q].end();it++){
unionn.insert(*it);
} //合并 */
set_union(a[p].begin(),a[p].end(),a[q].begin(),a[q].end(),inserter(unionn,unionn.begin()));
int nt=unionn.size(); //去重后的总数
double ntc=(num-nt)/(1.0*nt);
printf("%.1f%\n",ntc*100);
}
return 0;
}