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 }