欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-07 21:45:04
...

题目:

天梯赛练习——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;
}

相关标签: # 天梯赛