题目入口
题目分析:
两个集合的交集个数/两个集合的并集个数
我用set_union和set_intersection最后一个测试点超时,忘记了可以只计算交集个数和并集个数,len/(la+lb-len);
然而使用一个也超时,查了用find函数。。。
AC代码:
#include<bits/stdc++.h>
using namespace std;
set<int>ss[59];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
int t;
cin>>t;
for(int j=0;j<t;j++){
int x;
cin>>x;
ss[i].insert(x);
}
}
int m;
cin>>m;
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
set<int>tmp;
int la=ss[a].size();
int lb=ss[b].size();
int len=0;
set<int>::iterator it=ss[a].begin();
for(;it!=ss[a].end();it++){
if(ss[b].find(*it)!=ss[b].end()){
len++;
}
}
//
//cout<<len<<endl;
printf("%.2f%%\n",100.0*(len)/(la+lb-len));
}
return 0;
}
~注意点:
虽然没用到。。
//a和b可以不是集合但必须是有序的
set_union(a.begin(),a.end(),b.begin(),b.end(),inserter(c,c.begin()));
set_intersection(a.begin(),a.end(),b.begin(),b.end(),inserter(c,c.begin()));