给定两个整数集合,两个集合的相似度定义为 Nc/Nt×100%,其中 Nc 是两个集合中都存在的不同整数的数量,Nt是两个集合中不同整数的数量。现在,请你计算给定集合的相似度。
思路:Nc是两集合共有的元素数量,Nt是两集合不同的元素数量=两集合总数-Nc
如何判断数是否在集合中? 利用STL中的set的count()函数
#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<n;i++)
#define INF 0x3f3f3f;
using namespace std;
const int N=1e5+233;
int n,m,k;
set<int>s[N];
void gao(int a,int b){
double nc=0,nt=0;
for(auto u:s[a]) nc+=s[b].count(u);
nt=s[a].size()+s[b].size()-nc;
printf("%.1lf%\n",(double)nc/nt*100);
}
int main(){
cin>>n;
rep(i,0,n){
cin>>m;
rep(j,0,m) {
int t;cin>>t;
s[i+1].insert(t);
}
}
cin>>k;
while(k--){
int a,b;
cin>>a>>b;
gao(a,b);
}
}