首页 > 代码库 > (c++ 实现)山东科技大学 oj 求集合的交并补集(数据结构习题)
(c++ 实现)山东科技大学 oj 求集合的交并补集(数据结构习题)
Problem A: 求集合的交并补集
Time Limit: 1 Sec Memory Limit: 4 MBSubmit: 3663 Solved: 1041
[Submit][Status][Web Board]
Description
任意给定两个包含1-30000个元素的集合A,B(集合中元素类型为任意整型数,且严格递增排列),求A交B、A并B、A-B和B-A集合。
Input
输入第一行为测试数据组数。每组测试数据两行,分别为集合A、B。每行第一个数n(1<=n<=30000)为元素数量,后面有n个严格递增的绝对值小于2^31代表集合中包含的数。
Output
对每组测试数据输出5行,第1行为数据组数,后4行分别为按升序输出两个集合的A交B、A并B、A-B和B-A集合。格式见样例。
Sample Input
13 1 2 54 2 3 5 8
Sample Output
Case #1:2 51 2 3 5 813 8
HINT
考察知识点:有序表合并,时间复杂度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 求集合的交并补集(数据结构习题)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。