美文网首页
PAT甲级A1047---set的常见用法

PAT甲级A1047---set的常见用法

作者: 1nvad3r | 来源:发表于2020-07-22 09:26 被阅读0次

1063 Set Similarity (25分)

1063
分析:

题目要求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;
}

相关文章

网友评论

      本文标题:PAT甲级A1047---set的常见用法

      本文链接:https://www.haomeiwen.com/subject/imzakktx.html