天梯赛L2-005 集合相似度(c++)
题目:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d516ea92d45de9d2be85dfcd43c4a5a0.png)
题解:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/575c728372861dcda41498b03e500988.jpeg#pic_center)
代码:
#include<iostream>
#include<map>
#include<set>
#include<cstdio>
using namespace std;
const int N = 1e9+5;
map<int,set<int>>mp;
int main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int n,m,x,y,z;
cin>>n;
for(int i=1;i<=n;i++){
cin>>m;
for(int j=1;j<=m;j++){
cin>>z;
mp[i].insert(z);
}
}
double sum=0;
double num=0;
cin>>m;
while(m--){
sum=0;
num=0;
cin>>x>>y;
for(auto i=mp[x].begin();i!=mp[x].end();i++){
if(mp[y].count(*i))
num++;
}
printf("%0.2lf%%\n",num/(mp[x].size()+mp[y].size()-num)*100);
}
return 0;
}