1063 Set Similarity (25分)

分析:
题目要求nc与nt的比率,nc为两个集合相同的元素(需去重)个数,nt为两个集合所有元素(需去重)的个数。先使用set记录所有的集合,对于要比较的两个集合,先令nc=0,nt=第二个集合的大小,然后遍历第一个集合,如果某个元素在第二个集合中,则nc++;如果某个元素不在第二个集合中,则nt++。 最终就可以求得nc和nt。
C++:
#include <cstdio>
#include <set>
using namespace std;
const int maxn = 51;
set<int> s[maxn];
int main() {
int n, m, k, num;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &m);
for (int j = 0; j < m; j++) {
scanf("%d", &num);
s[i].insert(num);
}
}
scanf("%d", &k);
int s1, s2;
for (int i = 0; i < k; i++) {
scanf("%d%d", &s1, &s2);
int nc = 0, nt = s[s2].size();
for (set<int>::iterator it = s[s1].begin(); it != s[s1].end(); it++) {
if (s[s2].find(*it) != s[s2].end()) {
nc++;
} else {
nt++;
}
}
printf("%.1f%%\n", nc * 100.0 / nt);
}
return 0;
}
网友评论