集合相似度(用c++解决)

 

 

#include<iostream>
using namespace std;
#include<set>

set<int> u[55];

double similar(int a, int b)
{
    int same = 0;
    double intersection, Union;
    for (set<int>::iterator pos = u[a].begin(); pos != u[a].end(); pos++)
    {
        if (u[b].find(*pos) != u[b].end())
        {
            same++;
        }
    }
    intersection = same;
    Union = u[a].size() + u[b].size() - same;
    return (intersection / Union) * 100;
}

int main(void)
{

    int N, K,num;
    scanf("%d", &N);

    for (int i = 0; i < N; i++)
    {
        scanf("%d", &K);
        for (int j = 0; j < K; j++)
        {
            scanf("%d", &num);
            u[i].insert(num);
        }
    }
    int g,a,b;
    double result;
    scanf("%d", &g);
    for (int i = 0; i < g; i++)
    {
        scanf("%d %d", &a, &b);
        result = similar(a-1, b-1);
        printf("%.2lf%%\n", result);
    }
}

 

posted @ 2020-12-13 10:08  loliconsk  阅读(260)  评论(0)    收藏  举报