1063 Set Similarity 

n个序列分别先放进集合里去重。在询问的时候,遍历A集合中每个数,判断下该数在B集合中是否存在,统计存在个数(分子),分母就是两个集合大小减去分子。

 1 // 1063 Set Similarity
 2 #include <set>
 3 #include <map>
 4 #include <cstdio>
 5 #include <iostream>
 6 #include <algorithm>
 7 using namespace std;
 8 
 9 set <int> se[55];
10 
11 int main() {
12     int n, k, m;
13     scanf("%d", &n);
14     for(int i = 1; i <= n; i++) {
15         scanf("%d", &m);
16         while(m--) {
17             scanf("%d", &k);
18             se[i].insert(k);
19         }
20     }
21     scanf("%d", &k);
22     while(k--) {
23         int id1, id2;
24         double cnt = 0, total = 0;
25         scanf("%d %d", &id1, &id2);
26         for(int i : se[id1]) {
27             if(se[id2].find(i) != se[id2].end()) cnt++;
28         }
29         total = se[id1].size() + se[id2].size() - cnt;
30         printf("%.1f%\n", cnt * 100 / total);
31     }
32     return 0;
33 }
View Code

相关文章: