【TOJ 1743】集合运算(set集合并、交、差的运用)

Description

给定两个集合A和B的所有元素,计算它们的交、并、差集。

Input

输入数据有多组,第一行为数据的组数T,接下来有2T行,每组数据占2行,每行有若干个整数,第一行的所有整数构成集合A,第二行的所有整数构成集合B,分别用空格分隔。A和B最多分别不超过100个元素。

Output

输出A、B的交、并、差集中的所有元素(以递增顺序)。每个集合占一行,数据元素之间用空格分隔。

Sample Input 

1
0 1 2 3 4 5 6 7 8 8
3 6 8 9

Sample Output

3 6 8
0 1 2 3 4 5 6 7 8 9
0 1 2 4 5 7

#include<set>
#include<algorithm>
#include<iterator>
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
    set<int>v1,v2,v3;
    string s1,s2;
    int i,j,t,a;
    set<int>::iterator it;
    cin>>t;
    getchar();
    while(t--)
    {
        j=0;
        getline(cin,s1);           //数字类型的字符串导入s1
        stringstream ss1(s1);      //字符串s1再导入ss1流中
        while(ss1>>a)              //流中的字符串s1导入int a中变成数字
        {
            v1.insert(a);          //将a中暂时保存的数字转入set
        }
        getline(cin,s2);
        stringstream ss2(s2);
        while(ss2>>a)
        {
            v2.insert(a);
        }
        set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),inserter(v3,v3.begin()));        //交
        for(it=v3.begin();it!=v3.end();it++)
        {
            if(j==0)
            {
                cout<<*it;
                j=1;
            }
            else cout<<" "<<*it;
        }
        cout<<endl;
        v3.clear();                //清空v3集合
        set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),inserter(v3,v3.begin()));        //并
        j=0;
        for(it=v3.begin();it!=v3.end();it++)
        {
            if(j==0)
            {
                cout<<*it;
                j=1;
            }
            else cout<<" "<<*it;
        }
        cout<<endl;
        v3.clear();
        set_difference(v1.begin(),v1.end(),v2.begin(),v2.end(),inserter(v3,v3.begin()));        //差
        j=0;
        for(it=v3.begin();it!=v3.end();it++)
        {
            if(j==0)
            {
                cout<<*it;
                j=1;
            }
            else cout<<" "<<*it;
        }
        cout<<endl;
        v3.clear();
        v1.clear();                //清空v1集合
        v2.clear();                //清空v2集合
    }
    return 0;
}

原文地址:https://www.cnblogs.com/kannyi/p/8519651.html

时间: 2024-10-08 00:19:25

【TOJ 1743】集合运算(set集合并、交、差的运用)的相关文章

T-SQL基础(四)之集合运算

三个运算符 T-SQL支持三个集合运算符:UNION.INTERSECT.EXCEPT. 集合运算符查询的一般形式如下: Query1 <set_operator> Query2 -- 这里,ORDER BY子句对最终结果集进行排序 [ORDER BY...] ORDER BY 在逻辑查询处理方面,集合运算符应用于两个查询结果集,且外部的ORDER BY子句(如果有的话)应用于集合运算所得到的结果集. 每个独立的查询可以使用除了ORDER BY之外的所有逻辑查询处理阶段,原因如下: ORDER

润乾集算报表非常规统计之集合运算

报表数据源计算中经常会使用到集合运算,SQL对集合运算的支持使得大部分简单的集合运算都能轻松完成.但是,当集合运算比较复杂,需要使用存储过程完成时,由于存储过程对集合运算的支持不够,也无法使用中间结果导致这类运算实现起来非常困难. 像http://bbs.csdn.net/topics/390902711中提到的问题,就是一个比较典型的复杂集合运算问题,这类计算往往都是为前台报表服务的,使用SQL和存储过程都很难完成.而一般的报表工具由于不具备强计算能力,对于这类计算更加无法完成. 使用润乾集算

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;

UNION(并集)集合运算

在集合论中,两个集合(记为集合A和B)的并集是一个包含集合A和B中所有元素的集合.换句话说,如果一个元素属于任何一个输入集合,那么它也属于结果集. 在T-SQL中,UNION 集合运算可以将两个输入查询的结果集组合成一个结果集.如果一个行在任何一个输入集合中出现,它也会在UNION运算的结果中出现.T-SQL 支持在UNION集合运算中使用UNION ALL 和UNION(隐含DISTINCT,DISTINCT不能显示指定)选项. UNION ALL 集合运算 对于作为运算的输入查询而生成的多集

Sql学习笔记3——集合运算、空值和聚集函数

1.集合运算 SQL作用在关系上的union.intersect和except(Oracle中用minus代替except)运算,对应于数学集合论中的并.交和差运算.这三个运算都自动去除重复. eg: 找出在2009年秋季学期开课但不在2010年春季开课的所有课程 (select course_id from section where semester=‘Fall’ and year=2009) except (select course_id from section where semes

集合运算 &amp; 聚合函数

1.集合运算 1.1.并集运算 UNION 1.2.差集运算 EXCEPT 1.3.交集运算 INTERSECT 1.4.集合运算小结 2.聚合函数 2.1.求行数函数 COUNT 2.2.求和函数 SUM 2.3.求最大值函数 MAX 2.4.求最小值函数 MIN 2.5.求平均值函数 AVG 2.6.聚合函数小结 3.本文小结 1.集合运算 在数学中,不仅可以对指定的数字个体做四则运算,还可以对指定的集合整体做交并补运算.类似的,在数据库中也是不仅可以对具体的数据行进行增删改查,还可以对查询

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

INTERSECT(交集)集合运算

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

详解SQL集合运算

以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通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.集合运算 [T-SQL基础]06.透视.逆透视.分组集 [T-SQL基础]07.数据修改 [T-SQL基础]08.事务和并发 [