天梯赛练习——7-41 集合相似度 (25分)(set集合)

题目:

在这里插入图片描述

分析:

此题使用set来做,对于每一个输入的元素,将其插入到所属的set集合中,因为set保证了元素的不重复性,所以最后两个集合一共有的不相等整数的个数等于:集合1的元素个数 + 集合2的元素个数 - 两个集合共有的元素个数。两个集合共有的元素的查找:遍历一个集合中的每个元素,使用 find 方法查找另一个集合中是否存在此元素。最后相除即可得出答案。

代码:

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

set<int> num[55];
int n,m,k;

int main()
{
    int val;
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
    {
        scanf("%d",&m);
        for(int j=1;j<=m;++j)
        {
            scanf("%d",&val);
            num[i].insert(val);
        }
    }
    scanf("%d",&k);
    int x1,x2;
    for(int i=1;i<=k;++i)
    {
        scanf("%d%d",&x1,&x2);
        int ans = 0;
        set<int>::iterator iter;
        for(iter=num[x1].begin();iter!=num[x1].end();++iter)
            if(num[x2].find(*iter) != num[x2].end())
                ans++;
        double res = 1.0*ans / (num[x1].size()+num[x2].size()-ans);
        res = res*100;
        printf("%.2f%%\n",res);
    }
    return 0;
}

发布了61 篇原创文章 · 获赞 7 · 访问量 3612

猜你喜欢

转载自blog.csdn.net/weixin_42469716/article/details/105310425