2853. 集合运算

单点时限: 2.0 sec

内存限制: 256 MB

计算集合 A 和集合 B 的交集 C=A∩B、并集 D=A∪B 和差集 E=A−B。

集合的元素值均为整数,集合 A 和集合 B 的元素个数均不大于 1000。集合 A 和集合 B 可能是空集。

输入格式
第 1 行由两个用一个空格分隔的整数组成,分别是集合 A 和集合 B 的元素个数。

第 2 行由用一个空格分隔的若干整数组成(空集时为空行),表示集合 A 的每个元素值。

第 3 行由用一个空格分隔的若干整数组成(空集时为空行),表示集合 B 的每个元素值。

输出格式
共有 3 行,分别表示集合 C、集合 D 和集合 E。

一个集合的输出以左花括号开头,右花括号结束。中间显示的集合元素按升序排列,元素之间包含一个逗号。空集时输出为 {}。

样例
input
5 6
1 2 3 4 5
15 14 13 12 11 10
output
{}
{1,2,3,4,5,10,11,12,13,14,15}
{1,2,3,4,5}

/*
C++中STL库
使用python也方便
*/
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
void print(set<int>& s)
{
    cout<<"{";
    if (s.size()==0)
        cout<<"}"<<endl;
    else
       {
        auto it = s.begin();
        int i=0;
        for (;i<s.size()-1;++it,++i)
            cout<<*it<<",";
        cout<<*it<<"}"<<endl;
       }
}
int main()
{
    int n1,n2,tmp;
    set<int> x,y,a,b,c;
    cin>>n1>>n2;
    int i,j;
    for (i=0;i<n1;++i)
    {
        cin>>tmp;
        x.insert(tmp);
    }
    for (i=0;i<n2;++i)
    {
        cin>>tmp;
        y.insert(tmp);
    }
    set_intersection(x.begin(),x.end(),y.begin(),y.end(),inserter(a,a.end()));
    set_union(x.begin(),x.end(),y.begin(),y.end(),inserter(b,b.end()));
    set_difference(x.begin(),x.end(),y.begin(),y.end(),inserter(c,c.end()));
    print(a);
    print(b);
    print(c);
}
发布了45 篇原创文章 · 获赞 21 · 访问量 453

猜你喜欢

转载自blog.csdn.net/qq_40394960/article/details/105190293