单点时限: 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);
}