pat甲级1063

本文通过C++代码演示了如何使用set_intersection()和set_union()函数来求两个集合的交集和并集,并通过实例计算了交集占并集的比例。尽管代码在大数据集上可能超时,但作为学习STL算法的良好示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

练习使用set_intersection()和set_union()求交集和并集,代码会超时,只是练习而已

#include <cstdio>
#include <set>
#include <algorithm>

using namespace std;

int main(){
    int N, K;
    scanf("%d", &N);
    set<int> s[N];
    for(int i=0; i<N; i++){
        int n;
        scanf("%d", &n);
        while(n--){
            int num;
            scanf("%d", &num);
            s[i].insert(num);
        }
    }
    scanf("%d", &K);
    double re[K];
    for(int i=0; i<K; i++){
        int s1, s2;
        scanf("%d%d", &s1, &s2);
        s1--;
        s2--;
        set<int> s_inter, s_union;
        set_intersection(s[s1].begin(), s[s1].end(), s[s2].begin(), s[s2].end(), inserter(s_inter, s_inter.begin()));
        set_union(s[s1].begin(), s[s1].end(), s[s2].begin(), s[s2].end(), inserter(s_union, s_union.begin()));
        re[i] = (1.0*s_inter.size()/s_union.size())*100;
    }
    for(int i=0; i<K; i++){
        printf("%.1f%%\n", re[i]);
    }

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值