Pregunta A: Establecer similitud
http://codeup.cn/problem.php?cid=100000597&pid=0 El
tema dice: primero calcule la intersección Nc de los dos conjuntos después de la deduplicación, luego calcule la unión de los dos elementos y la deduplicación Nt, y divida los dos.
ejemplo:
1 和 2 集合 交集有 87 101
并集有 99 87 101 5
2/4=0.5
1 和 3 集合 交集有 99 101
并集有 87 101 99 18 5 135
2/6=1/3
La idea es encontrar el número n de números repetidos de ayb y
luego usar a.size () + b.size () - n = número de unión m
n / m
#include<cstdio>
#include<set>
#include<iostream>
using namespace std;
set<int> s[200];
int main(void)
{
int n;
int m;
int i,j;
int number;
cin>>n;
j=0;
while(n)
{
cin>>m;
for(i=0;i<m;i++)
{
scanf("%d",&number);
s[j].insert(number);
}
n--;
j++;
}
int w,a,b;
set<int>::iterator it;
cin>>w;
while(w)
{
scanf("%d %d",&a,&b);
int temp;
int count=0;
for(it=s[a-1].begin();it!=s[a-1].end();it++)
{
if(s[b-1].find(*it)!=s[b-1].end())//说明重复了
{
count++;
}
}
int ans=s[b-1].size()+s[a-1].size()-count;
printf("%.1lf%%\n",100*(double)count/ans);
w--;
}
return 0;
}