集合相似度

给定两个整数集合,它们的相似度定义为:Nc​/Nt​×100%。其中 Nc​ 是两个集合都有的不相等整数的个数,Nt​ 是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。

输入格式:

输入第一行给出一个正整数 n(≤50),是集合的个数。随后 n 行,每行对应一个集合。每个集合首先给出一个正整数 m(≤104),是集合中元素的个数;然后跟 m 个 [0,109] 区间内的整数。

之后一行给出一个正整数 k(≤2000),随后 k 行,每行对应一对需要计算相似度的集合的编号(集合从 1 到 n 编号)。数字间以空格分隔。

输出格式:

对每一对需要计算的集合,在一行中输出它们的相似度,为保留小数点后 2 位的百分比数字。

输入样例:

复制代码
3
3 99 87 101
4 87 101 5 87
7 99 101 18 5 135 18 99
2
1 2
1 3

输出样例:

复制代码
50.00%
33.33%
cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
set<int> s[55];//set容器
set<int>::iterator it;
int main()
{
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		int m, x;
		cin >> m;
		while (m--) {
			cin >> x;
			s[i].insert(x);
		}
	}
	int k, a, b;
	cin >> k;
	while (k--) {
		cin >> a >> b;
		int la = s[a].size(), lb = s[b].size(), cnt = 0;
		for (it = s[a].begin(); it != s[a].end(); it++) {
			if (s[b].find(*it) != s[b].end()) {
				cnt++;
			}
		}
		printf("%.2lf%%\n", cnt * 1.0 / (la + lb - cnt) * 100);
	}
	return 0;
}
相关推荐
北京地铁1号线31 分钟前
2.3 相似度算法详解:Cosine Similarity 与 Euclidean Distance
算法·余弦相似度
Remember_99343 分钟前
【LeetCode精选算法】滑动窗口专题一
java·数据结构·算法·leetcode·哈希算法
Lueeee.1 小时前
v4l2驱动开发
数据结构·驱动开发·b树
小饼干超人1 小时前
详解向量数据库中的PQ算法(Product Quantization)
人工智能·算法·机器学习
你撅嘴真丑2 小时前
第四章 函数与递归
算法·uva
漫随流水2 小时前
leetcode回溯算法(77.组合)
数据结构·算法·leetcode·回溯算法
玄冥剑尊2 小时前
动态规划入门
算法·动态规划·代理模式
mjhcsp2 小时前
P14987 全等(mjhcsp)
算法·题解·洛谷
(❁´◡`❁)Jimmy(❁´◡`❁)2 小时前
Atcoder abc441A~F 题解
算法·深度优先·图论
少林码僧2 小时前
2.30 传统行业预测神器:为什么GBDT系列算法在企业中最受欢迎
开发语言·人工智能·算法·机器学习·ai·数据分析