练习使用set_intersection()和set_union()求交集和并集,代码会超时,只是练习而已
#include <cstdio>
#include <set>
#include <algorithm>
using namespace std;
int main(){
int N, K;
scanf("%d", &N);
set<int> s[N];
for(int i=0; i<N; i++){
int n;
scanf("%d", &n);
while(n--){
int num;
scanf("%d", &num);
s[i].insert(num);
}
}
scanf("%d", &K);
double re[K];
for(int i=0; i<K; i++){
int s1, s2;
scanf("%d%d", &s1, &s2);
s1--;
s2--;
set<int> s_inter, s_union;
set_intersection(s[s1].begin(), s[s1].end(), s[s2].begin(), s[s2].end(), inserter(s_inter, s_inter.begin()));
set_union(s[s1].begin(), s[s1].end(), s[s2].begin(), s[s2].end(), inserter(s_union, s_union.begin()));
re[i] = (1.0*s_inter.size()/s_union.size())*100;
}
for(int i=0; i<K; i++){
printf("%.1f%%\n", re[i]);
}
return 0;
}