PAT-1063 Set Similarity (set集合)
1063. Set Similarity
Given two sets of integers, the similarity of the sets is defined to be Nc/Nt*100%, where Nc is the number of distinct common numbers
shared by the two sets, and Nt is the total number of distinct numbers in the two sets. Your job is to calculate the similarity of any given pair of sets.
Input Specification:
Each input file contains one test case. Each case first gives a positive integer N (<=50) which is the total number of sets. Then N lines follow, each gives a set with a positive M (<=104) and followed
by M integers in the range [0, 109]. After the input of sets, a positive integer K (<=2000) is given, followed by K lines of queries. Each query gives a pair of set numbers (the sets are numbered from 1 to N). All the numbers
in a line are separated by a space.
Output Specification:
For each query, print in one line the similarity of the sets, in the percentage form accurate up to 1 decimal place.
Sample Input:
3
3 99 87 101
4 87 101 5 87
7 99 101 18 5 135 18 99
2
1 2
1 3
Sample Output:
50.0%
33.3%
题目大意:输入n个集合,每个集合中有若干数,现在需要做k次查询,每次给出要比较的两个集合,要求计算出相似度 = Nc / Nt * 100%,其中Nc是两个集合的交集的大小,Nt是两个集合并集的大小。
主要思想:考虑到每一个集合中可能存在重复的数,而且需要做大量的查找操作(找并集时对集合a的每个元素判断是否存在于集合b),很容易想到stl库中的set容器,因为set中不存在重复元素,而且查找操作很快。对于每次查找操作,设置初始值nc为
0, nt 为集合 b 的大小,集合 a 的每个元素,如果存在于集合 b,则 nc+1;如果不存在,则 nt+1(注意:如果用两集合大小之和 减去 两集合交集大小 来计算 nt,可能会出现超时)。
#pragma warning(disable: 4786)
#include <cstdio>
#include <vector>
#include <set>
using namespace std;
int main(void) {
int n, i, j; scanf("%d", &n);
vector<set<int> > vec(n);
set<int>::iterator iter;
int m, num;
for (i = 0; i < n; i++) {
scanf("%d", &m);
for (j = 0; j < m; j++) {
scanf("%d", &num);
vec[i].insert(num);
}
}
int k, a, b;
scanf("%d", &k);
for (i = 0; i < k; i++) {
scanf("%d%d", &a, &b);
int nc = 0, nt = vec[b-1].size();
for (iter = vec[a-1].begin(); iter != vec[a-1].end(); iter++) {
if (vec[b-1].count(*iter)) //if (vec[b-1].find(*iter) != vec[b-1].end())
nc++;
else
nt++;
}
// nt = vec[a-1].size() + vec[b-1].size() - nc; //这样计算可能会超时
printf("%.1f%%\n", nc * 1.0 / nt * 100);
} return 0;
}
爬虫中的set容器解决这个问题就更容易了,& 和 | 分别对应交集和并集,唯一不足的就是有一个用例超时了。
n = int(input())
L1 = []
for i in range(n):
st = input()
L2 = st.split(' ')
L1.append(set(L2[1:]))
k = int(input())
for i in range(k):
pair = input().split(' ')
x, y = int(pair[0]), int(pair[1])
similarity = len(L1[x-1] & L1[y-1]) / len(L1[x-1] | L1[y-1]) * 100
print('%.1f%%' % (similarity)
PAT-1063 Set Similarity (set集合)的更多相关文章
- PAT 1063 Set Similarity[比较]
1063 Set Similarity (25 分) Given two sets of integers, the similarity of the sets is defined to be N ...
- PAT 1063. Set Similarity
1063. Set Similarity 题目大意 给定 n 个集合, k 个询问, 求任意两个集合的并集和合集. 思路 一道裸的考察 STL 中 set 的题, 我居然还用 hash 错过一遍, 用 ...
- PAT 1063 Set Similarity (25)
题意:给你n个集合,k次询问,每次询问求两个集合的(交集)/(并集). 思路:k有2000,集合大小有10000.先将每个集合排序,对每个询问分别设两个指针指向两个集合的头.设a[i]为指针1的值,b ...
- PAT 甲级 1063 Set Similarity (25 分) (新学,set的使用,printf 输出%,要%%)
1063 Set Similarity (25 分) Given two sets of integers, the similarity of the sets is defined to be ...
- 1063 Set Similarity——PAT甲级
1063 Set Similarity Given two sets of integers, the similarity of the sets is defined to be Nc/Nt*10 ...
- 1063. Set Similarity (25)
1063. Set Similarity (25) 时间限制 300 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Given ...
- 【PAT】1063. Set Similarity (25) 待改进
Given two sets of integers, the similarity of the sets is defined to be Nc/Nt*100%, where Nc is the ...
- PAT甲题题解-1063. Set Similarity (25)-set的使用
题意:两个整数集合,它们的相似度定义为:nc/nt*100%nc为两个集合都有的整数nt为两个集合一共有的整数注意这里的整数都是各不相同的,即重复的不考虑在内.给出n个整数集合,和k个询问,让你输出每 ...
- PAT 甲级 1063 Set Similarity
https://pintia.cn/problem-sets/994805342720868352/problems/994805409175420928 Given two sets of inte ...
- 【PAT甲级】1063 Set Similarity (25 分)
题意: 输入一个正整数N表示集合的个数(<=50),接着输入N行,每行包括一个数字x代表集合的容量(<=10000),接着输入x个非负整数.输入一个正整数Q(<=2000),接着输入 ...
随机推荐
- 构建密钥验证ssh
1.需要两个虚拟机,每一个创建一个用户登录到用户根下 2.每个用户都要创建密钥对 3.把两个用户的公用密钥用ssh-copy-id -i 命令将公用的密钥复制到另一个用户中 4.在客户端开 ...
- Redis数据迁移的三个方法
为什么80%的码农都做不了架构师?>>> 1. rdb数据备份恢复方法 redis 127.0.0.1:6379> SAVE OK 或者 redis-cli -h 127. ...
- 《例说51单片机(C语言版)(第3版)》——1-3 认识MCS-51的存储器结构
本节书摘来异步社区<例说51单片机(C语言版)(第3版)>一书中的第1章,第1.3节,作者:张义和,王敏男,许宏昌,余春长,更多章节内容可以访问云栖社区"异步社区"公众 ...
- 使用CXF开发Web Service服务
1.使用CXF开发Web Service服务端 1.1 开发一个Web Service业务接口,该接口要用@WebService修饰 (1)创建一个Java项目MyServer (2)在MyServe ...
- .NET Core+WebApi+EF访问数据新增用户数据
新建一个.NET Core项目,我使用的IDE是VS2019 依次创建三个Core类库:第一个命名api.Model,第二个api.Common,第三个api.Bo 解释一下这个三类库的作用: 第一个 ...
- cms 环境搭建
一 :安装 JDK: 1.在根目录下新建目录 JDK 2.通过 xftp 导入 jdk 压缩包到 JDK 目录中 jdk-8u144-linux-x64.tar.gz,解压 tar -zxvf jdk ...
- IoTClientTool自动升级更新
IoTClientTool是什么 IoTClientTool是什么,IoTClientTool是IoTClient开源组件的可视化操的作实现.方便对plc设备和ModBusRtu.BACnet.串口等 ...
- sqlserver2005定期备份和清除
1.打开管理->维护计划 2.右键点击新建维护计划 3.给新的维护计划自定义命名 4.可以看左下角的维护方式 5.拖动“备份数据库”到右边 6.选中,编辑备份方式 7.选择备份方式,所有数据库, ...
- Anaconda 常用命令大全
帮助目录 检查conda版本 升级当前版本的conda 创建一个新环境 激活新环境 Linux,Mac: Windows: 列出所有的环境 切换环境(activate/deactivate) Linu ...
- LTE无线网络优化简介
LTE无线网络优化特点 覆盖和质量的估计参数不同 TD-LTE使用RSPP.RSRQ.SINR进行覆盖和质量的评估. 影响覆盖问题的因素不同 工作频段的不同,导致覆盖范围的差异显著:需要考虑天线模式对 ...