博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
L2-005 集合相似度 (25 分)(set)
阅读量:3898 次
发布时间:2019-05-23

本文共 1070 字,大约阅读时间需要 3 分钟。

【题目】

L2-005 集合相似度 (25 分)

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

输入格式:

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

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

输出格式:

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

输入样例:

33 99 87 1014 87 101 5 877 99 101 18 5 135 18 9921 21 3

输出样例:

50.00%33.33%

【题解】

其中N​c​​是两个集合都有的不相等整数的个数,N​t​​是两个集合一共有的不相等整数的个数。

题意:Nc是两个集合的交集大小,Nt是两个集合的并集大小,需要去重,输出N​c​​/N​t​​×100%

需要掌握set的基本用法和迭代器的使用。

【代码】

int main(){    int n; scanf("%d",&n);    set 
s[55]; for(int i=1;i<=n;i++){ int x; scanf("%d",&x); while(x--){ int v; scanf("%d",&v); s[i].insert(v); } } int T; scanf("%d",&T); while(T--){ int a,b; scanf("%d%d",&a,&b); int cnt=0; for(set
::iterator it=s[a].begin();it!=s[a].end();++it) if(s[b].find(*it)!=s[b].end()) cnt++; int t=s[a].size()+s[b].size()-cnt; printf("%.2lf%\n",100.0*cnt/t); } return 0;}

 

转载地址:http://ibben.baihongyu.com/

你可能感兴趣的文章
JAVA人事管理系统
查看>>
Dubbo面试题(关注小R持续更新)
查看>>
JAVA仿微博系统(JAVA毕业设计含源码和运行教程)
查看>>
24BITBMP位图的文件结构及创建
查看>>
如何在自定义控件中获得width和height?
查看>>
Android UI开发专题之界面设计【基础API】
查看>>
ejarmaker: jar 、java类的加密工具
查看>>
配置NFS实现Linux服务器之间的文件共享
查看>>
PostgreSQL连接池pgbouncer的使用
查看>>
Kryo序列化进阶学习: 加密数据
查看>>
swift 3.0 数组赋值
查看>>
用C#通过888-TT打印中文标签
查看>>
sendmail 出现 My unqualified host name的解决办法
查看>>
彻底解决lazarus安装组件后烦人的编译时单元找不到的问题!
查看>>
Delphi的参数修饰const/var/output 与C++的对应关系
查看>>
C++ free与delete区别
查看>>
VC的字符串转换atlconv的使用
查看>>
Twitter的分布式自增ID算法snowflake (Java版)
查看>>
CentOS7 安装配置FastDFS
查看>>
递归算法的时间复杂度
查看>>