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

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位的百分比数字。

输入样例:
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加数组的形式存的,这没问题,但是我后来查的时候又开了一个set,然后遍历两遍,太慢了。
如下:

#include<iostream>
#include<iomanip>
#include<set>
#include<vector>
using namespace std;
set<int>ch[101];
double Check(int x,int y){set<int>zan;for (set<int>::iterator it = ch[x].begin();it!=ch[x].end();it++){zan.insert(*it);}for (set<int>::iterator it = ch[y].begin();it!=ch[y].end();it++){zan.insert(*it);}double zong = ch[x].size()+ch[y].size();double nc = zong - zan.size();double nt = zan.size();double sum = 100.0*nc/nt;return sum;
}
int main()
{int n;cin>>n;for (int i=1;i<=n;i++){int k,num;cin>>k;while (k--){cin>>num;ch[i].insert(num);}}cin>>n;int a,b;for (int i=0;i<n;i++){cin>>a>>b;double cha = Check(a,b);cout<<fixed<<setprecision(2)<<cha<<"%"<<endl;}return 0;
}

所以我后来改进了一下:

#include<iostream>
#include<iomanip>
#include<set>
#include<vector>
using namespace std;
set<int>ch[101];
double Check(int x,int y){int cou=0;for (set<int>::iterator it = ch[x].begin();it!=ch[x].end();it++){if (ch[y].find(*it)!=ch[y].end()) cou++; }int nt=ch[x].size()+ch[y].size()-cou;return 1.0*cou/nt*100;
}
int main()
{int n;cin>>n;for (int i=1;i<=n;i++){int k,num;cin>>k;while (k--){cin>>num;ch[i].insert(num);}}cin>>n;int a,b;for (int i=0;i<n;i++){cin>>a>>b;double cha = Check(a,b);cout<<fixed<<setprecision(2)<<cha<<"%"<<endl;}return 0;
}

过喽!芜湖!
STL库,yyds。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle有sysdata,Oracle基础

1、默认事例&#xff1a;用户名&#xff1a;scott密码&#xff1a;tiger 主机字符串&#xff1a;本机可以为空2、启动方法&#xff1a;运行&#xff1a;sqlplusscott/tigerlhd3、SQLPLUS基本命令&#xff1a;Desc&#xff1a;显示表、视图结构 desc 表名&#xff0c;视图List&…

selenium+java初级学习笔记之单个元素定位

元素定位可以大概分为八重一般情况下常用的就是by.id、by.name、by.classname&#xff0c;如果需要定位的元素中没有这几个可以选择其他方式的定位&#xff1a;By.id(id) //&#xff08;有时元素中id是会变化的&#xff0c;可以刷新页面&#xff0c;如果发现每次的id都不一样则…

L2-004 这是二叉搜索树吗? (25 分)

L2-004 这是二叉搜索树吗&#xff1f; (25 分) 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树&#xff1a;对于任一结点&#xff0c; 其左子树中所有结点的键值小于该结点的键值&#xff1b; 其右子树中所有结点的键值大于等于该结点的键值&#xff1b; 其左右子树都是…

Linux高频命令汇总,Linux高频命令

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;findfind path [options] params作用&#xff1a;在指定目录下查找文件1234find / -name "target.java" #在根目录下查找target.java文件find -name &qu…

深入理解javascript函数参数

arguments javascript对参数要求很随意&#xff0c;她才不管你传进来的参数是什么数据类型&#xff0c;甚至可以不传参数。实际上&#xff0c;javascript函数调用甚至不检查传入形参的个数。 1 function add(x){ 2 return x 1; 3 } 4 console.log(add(1))…

linux系统时间函数,Linux时间时区详解与常用时间函数

时间与时区整个地球分为二十四时区&#xff0c;每个时区都有自己的本地时间。UTC时间 与 GMT时间我们可以认为格林威治时间就是时间协调时间(GMT UTC)&#xff0c;格林威治时间和UTC时间都用秒数来计算的。UTC时间与本地时间UTC 时区差 本地时间时区差东为正&#xff0c;西为…

7-5 汉诺塔的非递归实现 (25 分)

7-5 汉诺塔的非递归实现 (25 分) 借助堆栈以非递归&#xff08;循环&#xff09;方式求解汉诺塔的问题&#xff08;n, a, b, c&#xff09;&#xff0c;即将N个盘子从起始柱&#xff08;标记为“a”&#xff09;通过借助柱&#xff08;标记为“b”&#xff09;移动到目标柱&…

js 异步问题

如果发现前端的异步请求&#xff0c;network有发送成功而且有返回值&#xff0c;但是没有进前端的callback成功回掉函数内&#xff0c;这时候就需要检查是不是配置文件做了语法限制&#xff0c;只能返回某些数据格式&#xff0c;不能返回某些数据格式。 一般限制最多的就是后端…

海康、大华IPC的rtsp格式

海康&#xff1a;  rtsp://[username]:[password][ip]:[port]/[codec]/[channel]/[subtype]/av_stream说明&#xff1a;username: 用户名。例如admin。password: 密码。例如12345。ip: 为设备IP。例如 192.0.0.64。port: 端口号默认为554&#xff0c;若为默认可不填写。codec…

linux awr 日志,Linux平台生成awr报告

1&#xff0e;使用Oracle用户登录应用服务器所使用的数据库所在的服务器# su –oracle2&#xff0e;输入env命令&#xff0c;查询出ORACLE_HOME 目录3&#xff0e;然后进入$ORACLE_HOME/rdbms/admin目录&#xff0c;查询awr语句(此步骤可以忽略)此处可以直接省略2&#xff0c;3…

利用一维数组输出杨辉三角

直接上代码&#xff1a; package hello;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);int n in.nextInt();int table [] new int [n1];table[0] 1;for (int i1;i<n;i) {for (int j0;j<…

缓存(Cache)管理 ---- 系列文章

利用Cache防止同一帐号重复登录.net中Cache管理操作系统缓存全解析 (下)系统缓存全解析 (中)系统缓存全解析 (上)出处&#xff1a;http://www.cnblogs.com/luckdv/tag/%E7%BC%93%E5%AD%98/转载于:https://www.cnblogs.com/mq0036/p/7291955.html

找到一个二位数组的鞍点

上代码&#xff1a; package hello;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);int mat[][] new int[3][3];for (int i0;i<3;i) {for (int j0;j<3;j) {mat[i][j] in.nextInt();}}bool…

linux 文件按时间 函数,[Linux文件属性]使用utime函数操作文件的时间参数

//这是一个使用utime函数对文件的时间参数进行修改的实例//文件首先使用stat函数获得文件当前的时间参数&#xff0c;然后使用//Open函数对文件进行修改&#xff0c;再用utime函数对文件的时间信息//进行修改.文件名由argv参数给出#include #include #include int main(int arg…

HDU 1159 Common Subsequence 动态规划

2017-08-06 15:41:04 writer&#xff1a;pprp 刚开始学dp&#xff0c;集训的讲的很难&#xff0c;但是还是得自己看&#xff0c;从简单到难&#xff0c;慢慢来&#xff08;如果哪里有错误欢迎各位大佬指正&#xff09; 题意如下&#xff1a; 给两个字符串&#xff0c;找到其中大…

用类,求三个数的最大数

上代码&#xff1a; package hello;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);int a,b,c;a in.nextInt();b in.nextInt();c in.nextInt();int num max(a,b,c);System.out.println("…

【Xmail】使用Xmail搭建局域网邮件服务器

下载地址&#xff1a; http://www.xmailserver.org/xmail-1.27.win32bin.zip&#xff0c;当前最新版本 1.27。 解压文件&#xff1a;xmail-1.27.win32bin.zip 1、把其中的 MailRoot 目录拷贝到 C:\&#xff1b; 2、把 C:\xmail-1.27.win32bin\xmail-1.27 目录下的所有文件&am…

linux ntfs硬盘自动挂,linux下查看所有硬盘分区+挂接NTFS磁盘/硬盘+自动挂接硬盘方法...

基本上所有Linux 发行版在启动系统时都是根据/etc/fstab文件的配置来挂载分区的。在/etc/fstab中&#xff0c;根据不同格式的分区&#xff0c;其挂载参数也不同&#xff0c;参数不同其结果不同&#xff0c;包括用户的读写权限&#xff0c;下面一一说来。1、对于fat32格式分区&a…

uploadify 配置后,页面显示无效果

uploadify使用的是Flash版本 谷歌浏览器&#xff1a;默认没有开启Flash&#xff0c;进行如下图设置即可 转载于:https://www.cnblogs.com/daryl/p/7299471.html

linux 磁盘科隆,上海第二工业大学嵌入式操作系统B复习(无答案版)

嵌入式操作系统B复习答疑时间6月18日9&#xff1a;00—14:00,15#518填空题20分&#xff0c;选择题20分&#xff0c;判断题10分&#xff0c;简答题20分&#xff0c;实验题30分。一&#xff0e;填空题1.ARM中断处理有哪两种中断模式、快速中断模式。2.基于J-TAG调试结构包括哪几个…