首页 > 其他 > 详细

L2-5 集合相似度 (set的应用)

时间:2018-01-29 23:25:45      阅读:224      评论:0      收藏:0      [点我收藏+]

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

解题思路:运用STL自带的set解决

 1 #include<cstdio>
 2 #include<set>
 3 using namespace std;
 4 
 5 int main(void)
 6 {
 7     set<int> s[55];
 8     int n;
 9     scanf("%d", &n);
10     for(int i = 1; i <= n; i++){
11         int m;
12         scanf("%d", &m);
13         for(int j = 0; j < m; j++){
14             int x;
15             scanf("%d", &x);
16             s[i].insert(x);
17         }
18     }
19     
20     int k;
21     scanf("%d", &k);
22     for(int i = 0; i < k; i++){
23         int a, b;
24         scanf("%d %d", &a, &b);
25         int sum = s[a].size() + s[b].size();
26         set<int>::iterator it;
27         int same = 0;
28         for(it = s[a].begin(); it != s[a].end(); it++){
29             if(s[b].count(*it) == 1){
30                 same++; sum--;
31             }
32         }
33         double re = (double)same / (double)sum;
34         re *= 100;
35         printf("%.2lf%\n", re);
36     }
37     
38     return 0;
39 }

 

L2-5 集合相似度 (set的应用)

原文:https://www.cnblogs.com/fatcatm/p/8379732.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!