[Swust OJ 632]--集合运算(set容器)

题目链接:http://acm.swust.edu.cn/problem/632/

Time limit(ms): 1000      Memory limit(kb): 65535

Description

集合的运算就是用给定的集合去指定新的集合。设A和B是集合,则它们的并差交补集分别定义如下: 
A∪B={x|x∈A∨x∈B} 
A∩B={x|x∈A∧x∈B} 
A – B={x|x∈A∧x不属于 B} 
SA ={x|x∈(A∪B)∧x 不属于A} 
SB ={x|x∈(A∪B)∧x 不属于B}

Input

输入可能有2~4行数据 
第一行输入集合A的元素个数M1(M1>=0),接下来一行输入集合A的元素 
第三行输入集合B的元素个数M2(M2>=0),最后一行输入集合B的元素

Output

输出共7行 
前2行分别输出集合A、B,接下5行来分别输出集合A、B的并(A∪B)、交(A∩B)、差(A – B)、补。

Sample Input


4

1 3 2 1

0

Sample Output


A={1, 2, 3}

B={}

AuB={1, 2, 3}

AnB={}

A-B={1, 2, 3}

SA={}

SB={1, 2, 3}

Hint

为了唯一确定输出结果,集合的元素按升序输出

解题思路:注意到了升序输出,结合集合运算的特点,直接利用set容器水过Orz~~~

 1 #include <iostream>
 2 #include <set>
 3 #include <string>
 4 #include <algorithm>
 5 #include <iterator>
 6 using namespace std;
 7
 8 set<int>a, b, c, d, e, f, g;
 9 int n, m, x;
10
11 void init(){
12     a.clear(); b.clear();
13     c.clear(); d.clear();
14     e.clear(); f.clear(); g.clear();
15 }
16
17 void Order(string str, set<int>s){
18     cout << str << "={";
19     for (set<int>::iterator it = s.begin(); it != s.end(); it++){
20         if (it == s.begin()) cout << *it;
21         else cout << ", " << *it;
22     }
23     cout << "}" << endl;
24 }
25 int main(){
26     while (cin >> n){
27         init();
28         for (int i = 0; i < n; i++){
29             cin >> x;
30             a.insert(x);
31         }
32         cin >> m;
33         for (int i = 0; i < m; i++){
34             cin >> x;
35             b.insert(x);
36         }
37         set_union(a.begin(), a.end(), b.begin(), b.end(), insert_iterator<set<int> >(c, c.begin()));//并
38         set_intersection(a.begin(), a.end(), b.begin(), b.end(), insert_iterator<set<int> >(d, d.begin()));//交
39         set_difference(a.begin(), a.end(), b.begin(), b.end(), insert_iterator<set<int> >(e, e.begin()));//差
40         set_difference(c.begin(), c.end(), a.begin(), a.end(), insert_iterator<set<int> >(f, f.begin()));
41         set_difference(c.begin(), c.end(), b.begin(), b.end(), insert_iterator<set<int> >(g, g.begin()));
42         Order("A", a);
43         Order("B", b);
44         Order("AuB", c);
45         Order("AnB", d);
46         Order("A-B", e);
47         Order("SA", f);
48         Order("SB", g);
49     }
50     return 0;
51 }

时间: 2024-08-25 07:07:15

[Swust OJ 632]--集合运算(set容器)的相关文章

[Swust OJ 403]--集合删数

题目链接:http://acm.swust.edu.cn/problem/403/ Time limit(ms): 5000 Memory limit(kb): 65535 Description 一个集合有如下元素:1是集合元素:若P是集合的元素,则2 * P +1,4*P+5也是集合的元素,取出此集合中最小的K个元素,按从小到大的顺序组合成一个多位数,现要求从中删除M个数位上的数字,使得剩下的数字最大,编程输出删除前和删除后的多位数字. 注:不存在所有数被删除的情况 Input 输入的仅一行

swust oj 1026--Egg pain&#39;s hzf

题目链接:http://acm.swust.edu.cn/problem/1026/ Time limit(ms): 3000 Memory limit(kb): 65535 hzf is crazy about reading math recently,and he is thinking about a boring problem. Now there are n integers Arranged in a line.For each integer,he wants to know

sql的基础语句-单行函数,dual,数字函数,日期函数,表连接,集合运算,分组报表,单行子查询,多行子查询

3. 单行函数 3.1 转换函数 select ascii('A'),chr(65) from dual; select to_char(1243123),1231451 from dual;靠左边的就是字符串,靠右边的就是数字 select to_char(123512a121) from dual;   --错误的写法,没有引号表示数字,但是数字里面包含了字母,不合法的输入值 select to_number('123141211') from dual; select to_number(

oracle中 常用的 join on 相关和 集合运算的总结

sql常用联合查询的 join on . left join(左连接) . right join (右连接).inner join (等值连接)以及常用的集合运算有:union.unionall.minus.intersect的效果和总结 首先接着用上一篇的book表和pbook表: 首先把join on和inner join 放在一起: select * from book a join ( select id,name,price from pbook) b on a.id=b.id; se

SWUST OJ Euclid&#39;s Game(0099)

Euclid's Game(0099) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 1855 Accepted: 589 Description Starts with two unequal positive numbers (M,N and M>N) on the board. Two players move in turn. On each move, a player has to write on the boar

SQL集合运算 差集 并集 交

SQL-3标准中提供了三种对检索结果进行集合运算的命令:并集UNION:交集INTERSECT:差集EXCEPT(在Oracle中叫做 MINUS).在有些数据库中对此的支持不够充分,如MySql中只有UNION,没有其他两种.实际上这些运算都可以通过普通的SQL来实现,虽然有时有些繁琐. 假设有两个表(或视图)s,t,s中有两个字段sa,sb:t中有两个字段ta,tb: 差集EXCEPT: PLAIN TEXT SQL: SELECTsaFROMs EXCEPT SELECTtaFROMt;

SQL集合运算

转载:详解SQL集合运算 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础]04.表表达式-上篇 [T-SQL基础]04.表表达式-下篇 [T-SQL基础]05.集合运算

笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-06 集合运算

T-SQL支持3种集合运算:并集(UNION).交集(INTERSECT)和差集(EXCEPT).集合运算涉及的两个查询不能包含ORDER BY子句. UNION ALL集合运算 UNION ALL不会对行进行比较,也不会删除重复行.假设查询Query1返回m行,查询Query2返回n行,则Query1 UNION ALL Query2返回(m+n)行. SELECT country, region, city FROM HR.Employees UNION ALL SELECT country

INTERSECT(交集)集合运算

在集合论中,两个集合(记为集合A和B)的交集是由既属于A,也属于B的所有元素组成的集合. 在T-SQL 中,INTERSECT 集合运算对两个输入查询的结果集取其交集,只返回在两个查询结果集中都出现的行. INTERSECT DISTINCT集合运算 INTERSECT 集合运算在逻辑上首先删除两个输入多集中的重复行(把多集变为集合),然后返回只在两个集合中都出现的行.换句话说,如果一个行在两个输入多集中都至少出现一次,那么交集返回的结果中将包含这一行. SELECT c FROM a INTE