代码:
#include<iostream>
#include<algorithm>
#include<vector>
#include<set>
using namespace std;
int main(){
set<int>a[55];
int n;
cin>>n;
for(int i=1;i<=n;i++){
int k;
cin>>k;
for(int j=0;j<k;j++){
int t;
cin>>t;
a[i].insert(t);
}
}
int m;
cin>>m;
for(int i=0;i<m;i++){
int x,y;
cin>>x>>y;
int cnt=0;
//只能用!=,用<报错,因为*it能代表set序列里的数,it可能是一个地址,但是set里的数地址并不是连续的,或者是相差1
//为什么用auto定义it,不能使用find(*it)会报错,而是可以用count(*it)
//因为find如果找不到这个数会返回a[y].end(),要对其进行一个判断
// set<int>::iterator it;
for(auto it=a[x].begin();it!=a[x].end();it++){
if(a[y].find(*it)!=a[y].end()){
cnt++;
}
}
int ss=a[x].size()+a[y].size()-cnt;
printf("%.2lf%%\n",cnt*100.0/ss);
}
return 0;
}
题目: