- 题目要求:给出n个集合,每个集合有m个元素。对于k个查询,每个查询为两个集合的编号,输出这两个集合的相似度,相似度等于nc/nt。其中nc为两个集合相同元素的个数,nt为两个集合中不同元素的个数。
- 学会使用STL中的set就行了。
代码如下:
#include<iostream>
#include<set>
#include<map>
#include<stdio.h>
using namespace std;
int n;//n个集合
set<int> s[55];
int m,k;//每个集合m个元素,k个查询
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>m;
int a;
for(int j=0;j<m;j++){
cin>>a;
s[i].insert(a);
}
}
cin>>k;
int a,b;
for(int i=0;i<k;i++){
cin>>a>>b;
int nc=0, nt=s[b].size();
set<int>::iterator it;
for(it=s[a].begin();it!=s[a].end();it++){
if(s[b].find(*it)==s[b].end()){
nt++;
}else{
nc++;
}
}
float rate=(float)(nc*100)/(float)nt;
printf("%.1f%%\n", rate);
}
return 0;
}