PAT (Advanced Level) Practice A1063 Set Similarity (25 分)(C++)(甲级)(set)

版权声明:假装有个原创声明……虽然少许博文不属于完全原创,但也是自己辛辛苦苦总结的,转载请注明出处,感谢! https://blog.csdn.net/m0_37454852/article/details/86645019

原题链接:1063 Set Similarity

#include<algorithm>
#include<iostream>
#include<cstdio>
#include <set>
using namespace std;

set<int> S[55];

int main()
{
    int N, M, K, Nc, Nt, a, b, x;
    scanf("%d", &N);
    for(int i=1, j; i<=N; i++)//集合的ID从1开始,要注意
    {
        scanf("%d", &M);
        for(j=0; j<M; j++)
        {
            scanf("%d", &x);
            S[i].insert(x);
        }
    }
    scanf("%d", &K);
    for(int i=0, j; i<K; i++)
    {
        Nc = 0, Nt = 0;
        scanf("%d %d", &a, &b);
        for(set<int>::iterator it = S[a].begin(); it != S[a].end(); it++)
        {
            if(S[b].find(*it) != S[b].end()) Nc++;//查找到,则说明为共同元素
        }
        Nt = (S[a].size() + S[b].size()) - Nc;//两集合元素总数
        printf("%.1lf%%\n", 100.0*Nc/(1.0*Nt));//%号打印是两个%,注意
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_37454852/article/details/86645019