pta 集合相似度 (stl)
2017-03-18 21:17
197 查看
5-9 集合相似度 (25分)
给定两个整数集合,它们的相似度定义为:N_c / N_t \times
100\%Nc/Nt×100%。其中N_cNc是两个集合都有的不相等整数的个数,N_tNt是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。
50≤50),是集合的个数。随后NN行,每行对应一个集合。每个集合首先给出一个正整数MM(\le
10^4≤104),是集合中元素的个数;然后跟MM个[0,
10^9][0,109]区间内的整数。
之后一行给出一个正整数KK(\le
2000≤2000),随后KK行,每行对应一对需要计算相似度的集合的编号(集合从1到NN编号)。数字间以空格分隔。
题意有点坑,nt就是两个数组里重复元素只保留一个后的元素个数,nc就是两个数组去重后相同元素的个数。
然后就是用set去做就行了,set会自动去重,且内部的find()函数就是二分的原理,时间复杂度很低。
当然二分也可以过
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e4+5;
set <int>num[55];
set <int>::iterator it;
int main()
{
int m, n, j, i;
scanf("%d", &n);
for(i=1; i<=n; i++)
{
int k, x;
scanf("%d", &k);
for(j=1; j<=k; j++)
{
scanf("%d", &x);
num[i].insert(x);
}
}
int t, x, y;
cin>>t;
while(t--)
{
scanf("%d%d", &x, &y);
double p, q;
p=q=0;
for(it=num[x].begin(); it!=num[x].end(); it++)
{
if(num[y].find(*(it))!=num[y].end())q++;
}
p=(int)num[x].size()+(int)num[y].size()-q;
printf("%.2lf%%\n", q/p*100);
}
}
给定两个整数集合,它们的相似度定义为:N_c / N_t \times
100\%Nc/Nt×100%。其中N_cNc是两个集合都有的不相等整数的个数,N_tNt是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。
输入格式:
输入第一行给出一个正整数NN(\le50≤50),是集合的个数。随后NN行,每行对应一个集合。每个集合首先给出一个正整数MM(\le
10^4≤104),是集合中元素的个数;然后跟MM个[0,
10^9][0,109]区间内的整数。
之后一行给出一个正整数KK(\le
2000≤2000),随后KK行,每行对应一对需要计算相似度的集合的编号(集合从1到NN编号)。数字间以空格分隔。
输出格式:
对每一对需要计算的集合,在一行中输出它们的相似度,为保留小数点后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%
题意有点坑,nt就是两个数组里重复元素只保留一个后的元素个数,nc就是两个数组去重后相同元素的个数。
然后就是用set去做就行了,set会自动去重,且内部的find()函数就是二分的原理,时间复杂度很低。
当然二分也可以过
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e4+5;
set <int>num[55];
set <int>::iterator it;
int main()
{
int m, n, j, i;
scanf("%d", &n);
for(i=1; i<=n; i++)
{
int k, x;
scanf("%d", &k);
for(j=1; j<=k; j++)
{
scanf("%d", &x);
num[i].insert(x);
}
}
int t, x, y;
cin>>t;
while(t--)
{
scanf("%d%d", &x, &y);
double p, q;
p=q=0;
for(it=num[x].begin(); it!=num[x].end(); it++)
{
if(num[y].find(*(it))!=num[y].end())q++;
}
p=(int)num[x].size()+(int)num[y].size()-q;
printf("%.2lf%%\n", q/p*100);
}
}
相关文章推荐
- PTA 7-9 集合相似度(STL之set初体验)
- CCCC题集 L2-005. 集合相似度 ( STL之set
- L2-005. 集合相似度_STL的 set
- PAT-4C-L2-005-集合相似度(STL)
- 团体程序设计天梯赛L2-005 集合相似度(STL)
- 【PTA】5-9 集合相似度 (25分)
- C++之STL中set的用法 PAT L2-005 集合相似度
- PAT L2-005. 集合相似度(STL)
- PAT-0L2-005. 集合相似度【STL】
- PAT(天梯赛练习题) -L2-005. 集合相似度(stl)
- PAT L2——005. 集合相似度
- PAT 天梯赛 L2-005 集合相似度
- PAT L2-005. 集合相似度(哈希+map)
- L2-005. 集合相似度
- STL 关联容器 之set(无重复有序集合)
- STL: 打印集合
- STL关联式容器之集合set
- STL源码学习----集合相关算法
- 【索引】哈希/STL集合
- C++抽象编程——STL实战(4)——计算集合的交集,并集及区别