任意给定两个包含1-30000个元素的集合A,B(集合中元素类型为任意整型数,且严格递增排列),求A交B、A并B、A-B和B-A集合。
标签:
考察知识点:有序表合并,时间复杂度O(n),空间复杂度O(n)
#include<bits/stdc++.h>
#define BEND(x) x.begin(),x.end()
#define INS(x) insert_iterator<set<int> >(x,x.begin())
using namespace std;
set<int> :: iterator it;
set<int> A,B,C;
void puts(set<int> &S){
for(it = S.begin(); it != S.end(); ++it){
if(it == S.begin()) cout<<*it;
else cout<<" "<<*it;
}
printf("\n");
}
int main(){
int cases, n, m, i = 1;
cin>>cases;
while(i<=cases){
cout<<"Case #"<<i++<<":"<<endl;
A.clear();B.clear();
cin>>n;
while(n--){
cin>>m;
A.insert(m);
}
cin>>n;
while(n--){
cin>>m;
B.insert(m);
}
C.clear();
set_intersection(BEND(A),BEND(B),INS(C));
puts(C);
C.clear();
set_union(BEND(A),BEND(B),INS(C));
puts(C);
C.clear();
set_difference(BEND(A),BEND(B),INS(C));
puts(C);
C.clear();
set_difference(BEND(B),BEND(A),INS(C));
puts(C);
}
}
(c++ 实现)山东科技大学 oj 求集合的交并补集(数据结构习题)
标签:
原文地址:http://www.cnblogs.com/cwenliu/p/5873043.html