您的位置:首页 > 其它

1063. Set Similarity (25)解题报告

2016-10-31 10:31 309 查看
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstdlib>
#include <set>
using namespace std;

double common(set<int> &s1, set<int> &s2);

int main(void) {
int n, m, k, tmp1, tmp2, i, j;
setvbuf(stdin, new char[1 << 20], _IOFBF, 1 << 20);
setvbuf(stdout, new char[1 << 20], _IOFBF, 1 << 20);
scanf("%d", &n);
set<int> *s = new set<int>
;
for (i = 0; i < n; i++) {
scanf("%d", &m);
for (j = 0; j < m; j++) {
scanf("%d", &tmp1);
s[i].insert(tmp1);
}
}
scanf("%d", &k);
for (i = 0; i < k; i++) {
scanf("%d %d", &tmp1, &tmp2);
printf("%.1lf%%\n", common(s[tmp1 - 1], s[tmp2 - 1]));
}
return 0;
}

double common(set<int> &s1, set<int> &s2) {
set<int>::iterator it1, it2;
int nc, nt;
nt = s1.size() + s2.size();
nc = 0;
for (it1 = s1.begin(); it1 != s1.end(); it1++) {
it2 = s2.find(*it1);
if (it2 != s2.end()) {
nc++;
}
}
nt -= nc;
return (double)nc / nt * 100.0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: