当前位置: 首页 > article >正文

L2-005 集合相似度

给定两个整数集合,它们的相似度定义为: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%

直接创建set然后搜就过了,额

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<set<int>>book;
int n,ni,m,a,b,x;
int main(){
	cin>>n;
	book.resize(n+2);
	for(int i=1;i<=n;++i){
		cin>>ni;
		for(int j=0;j<ni;++j){
			cin>>x;
			book[i].insert(x);
		}
	}
	cin>>m;
	while(m--){
		cin>>a>>b;
		int l=book[a].size()+book[b].size(),c=0;
		for(set<int>::iterator i=book[a].begin();i!=book[a].end();++i){
			if(book[b].find(*i)!=book[b].end())c++;
		}
		cout<<fixed<<setprecision(2)<<c*1.0/(l-c)*100<<"%\n";
	}
	return 0;	
}

http://www.kler.cn/a/599988.html

相关文章:

  • Android第六次面试总结(Java设计模式篇一)
  • 【JS_hook】爬虫调试技巧
  • 块与块参照的一些知识——CAD c#二次开发
  • html5-3D立方体动画项目开发实践
  • vue中props是什么
  • Edge打不开证书失效的网站
  • uv - 配置 [官方文档翻译]
  • 2021年蓝桥杯——杨辉三角形
  • deepseek搭建本地私有知识库dify安装介绍docker compose图文教程
  • GitHub高级筛选小白使用手册
  • Python----计算机视觉处理(Opencv:霍夫变换)
  • LiteratureReading:[2023] GPT-4: Technical Report
  • 数据库基础知识点(系列一)
  • 论文阅读笔记:Denoising Diffusion Implicit Models
  • 游戏引擎学习第180天
  • SEED XSS 实验环境搭建步骤《精简版》
  • 绿色暴政:Relax Max如何用军工科技定义环保新标准
  • 使用cursor开发java案例——springboot整合elasticsearch
  • Maven 简介及其核心概念
  • ctfshow WEB web2