/**************************
//@Author: 3stone
//@ACM: PAT-A1063
//@Time: 18/1/24
//@IDE: VS2017
***************************/
#include<cstdio>
#include<iostream>
#include<set>
#include<iterator>
using namespace std;
int main() {
set<int> data[60], interSet, unionSet;
int n, m, k, temp, qr_1, qr_2;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> m;
while (m-- > 0) {
cin >> temp;
data[i].insert(temp);
}
}
cin >> k;
for (int i = 0; i < k; i++) {
cin >> qr_1 >> qr_2;
//对比qr_1 qr_2的元素
int interNum = 0, unionNum = data[qr_1].size() + data[qr_2].size();
for (set<int>::iterator it = data[qr_1].begin(); it != data[qr_1].end(); it++) {
if (data[qr_2].find(*it) != data[qr_2].end()) {
interNum++;
unionNum--;
}
}
//直接用union和intersection虽然代码简单,但其实要复制粘贴所有set中的元素,会导致一组测试点超时
// interSet.clear();
// unionSet.clear();
// set_intersection(data[qr_1].begin(), data[qr_1].end(), data[qr_2].begin(), data[qr_2].end(), inserter(interSet, interSet.begin()));
// set_union(data[qr_1].begin(), data[qr_1].end(), data[qr_2].begin(), data[qr_2].end(), inserter(unionSet, unionSet.begin()));
// double query = (double)interSet.size() / unionSet.size();
double query = (double)interNum / unionNum;
query *= 100;
printf("%.1f%%\n", query);
}
system("pause");
return 0;
}
PAT-A1063. Set Similarity
猜你喜欢
转载自blog.csdn.net/qq_26398495/article/details/79155771
今日推荐
周排行