CSU 1409: 集合的并(数学啊 )

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1409

Description

给出两个由整数组成的集合AB,计算A ∪ B中包含多少个整数。

Input

输入的第一行包含一个整数T (T > 0),表示一共有T组测试数据。

对于每组测试数据,第一行包含一个整数n (1 ≤ n ≤ 105)。第二行包含2n个整数a1, b1, a2, b2, ..., anbn (0 < a1 ≤ b1 < a2 ≤ b2 < ... < an ≤ bn < 109),表示A = [a1, b1] ∪ [a2, b2] ∪ ... ∪ [anbn]。第三行包含一个整数m (1 ≤ m ≤ 105)。第四行包含2m个整数c1, d1, c2, d2, ..., cmdm (0 < c1 ≤ d1 < c2 ≤ d2 < ... < cm ≤ dm < 109),表示B = [c1, d1] ∪ [c2, d2] ∪ ... ∪ [cmdm]。

这里[xy]表示由xy之间(包含xy)所有整数组成的集合。

Output

对于每组测试数据,输出A ∪ B中包含多少个整数。

Sample Input

3
1
7 7
1
3 3
2
1 2 3 4
1
2 3
2
1 2 4 6
3
1 3 6 7 9 10

Sample Output

2
4
9

HINT

对样例1的解释:A = {7},B = {3},A ∪ B = {3, 7}。

对样例2的解释:A = {1, 2, 3, 4},B = {2, 3},A ∪ B = {1, 2, 3, 4}。

对样例3的解释:A = {1, 2, 4, 5, 6},B = {1, 2, 3, 6, 7, 9, 10},A ∪ B = {1, 2, 3, 4, 5, 6, 7, 9, 10}。

Source

中南大学第八届大学生程序设计竞赛

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct pos
{
    int x, y;
} a[500017];
bool cmp(pos a, pos b)
{
    if(a.x == b.x)
        return a.y > b.y;
    return a.x < b.x;
}
int main()
{
    int t;
    int n, m;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(int i = 0; i < n; i++)
        {
            scanf("%d%d",&a[i].x,&a[i].y);
        }
        scanf("%d",&m);
        for(int i = n; i < m+n; i++)
        {
            scanf("%d%d",&a[i].x,&a[i].y);
        }
        sort(a,a+n+m,cmp);
        int ans = 0;
        int pre = 0;
        for(int i = 0; i < n+m; i++)
        {
            if(a[i].x > pre)
            {
                pre = a[i].x;
            }
            if(pre <= a[i].y)
            {
                ans+=a[i].y-pre+1;
                pre = a[i].y+1;
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}
时间: 2024-08-09 14:47:58

CSU 1409: 集合的并(数学啊 )的相关文章

CSU 1410: 整数转换(数学啊 )

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1410 Description 我们可以通过对一个整数A进行加1操作或者乘2操作使其转换为另一个整数B. 给出两个整数X, Y,计算至少需要多少步才能将X转换为Y.. Input 输入的第一行包含一个整数T (1 ≤ T ≤ 500),表示一共有T组测试数据. 每组测试数据占一行,包含两个整数X, Y (1 ≤ X ≤ Y ≤ 1018). Output 对于每组测试数据,输出至少需要多

CSU 1334: 好老师(数学啊 湖南省第九届大学生计算机程序设计竞赛)

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1334 Description 我想当一个好老师,所以我决定记住所有学生的名字.可是不久以后我就放弃了,因为学生太多了,根本记不住.但是我不能让我的学生发现这一点,否则会很没面子.所以每次要叫学生的名字时,我会引用离他最近的,我认得的学生.比如有10个学生: A ? ? D ? ? ? H ? ? 想叫每个学生时,具体的叫法是: 位置 叫法 1 A 2 right of A (A右边的同

SQL入门之集合操作

尽管可以在与数据库交互时一次只处理一行数据,但实际上关系数据库通常处理的都是数据的集合.在数学上常用的集合操作为:并(union),交(intersect),差(except).对于集合运算必须满足下面两个要求: 两个数据集合必须具有同样数目的列 连个数据集中对应列的数据类型必须是一样的(或者服务器能够将其中一种类型转换为另一种类型) SQL语言中每个集合操作符包含两种修饰:一个包含重复项,另一个去除了重复项(但不一定去除了所有重复项). 0.union操作符 union和union all操作

JS实现集合

集合是由一组无序且唯一(即不能重复)的项组成的.这个数据结构使用了与有限集合相同的数学概念,但应用在计算机科学的数据结构中. function Set() { this.items = {}; } Set.prototype = { constructer: Set, has: function(value) { return value in this.items; }, add: function(value) { if (!this.has(value)) { this.items[val

子查询、集合查询

子查询.集合查询 1.子查询 1.1.子查询简介 1.2.WITH 子查询 2.集合查询 2.1.UNION 和 UNION ALL 2.2.MINUS 2.3.INTERSECT 2.4.集合运算与 ORDER BY 3.DISTINCT 子句 3.1.普通用法 3.2.做聚合函数的参数 4.总结 1.子查询 1.1.子查询简介 子查询是一个嵌套在 SELECT.INSERT.UPDATE 或 DELETE 语句或其他子查询中的查询.任何允许使用表达式的地方都可以使用子查询,换句话说,子查询几

python中列表 元组 字典 集合的区别

列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计过去一周我们买过的东西,把这些东西列出来,就是清单.由于我们买一种东西可能不止一次,所以清单中是允许有重复项的.如果我们扩大清单的范围,统计我们过去一周所有的花费情况,那么这也是一个清单,但这个清单里会有类别不同的项,比如我们买东西是一种花费,交水电费也是一种花费,这些项的类型是可以使不同的.pyt

数学:完全独立于实际场景的情况下定义的概念,可以正确的描述世界

知乎上有一段回答[1]: 什么是赋范线性空间.内积空间,度量空间,希尔伯特空间 ? 现代数学的一个特点就是以集合为研究对象,这样的好处就是可以将很多不同问题的本质抽象出来,变成同一个问题,当然这样的坏处就是描述起来比较抽象,很多人就难以理解了.既然是研究集合,每个人感兴趣的角度不同,研究的方向也就不同.为了能有效地研究集合,必须给集合赋予一些“结构”(从一些具体问题抽象出来的结构).从数学的本质来看,最基本的集合有两类:线性空间(有线性结构的集合).度量空间(有度量结构的集合).对线性空间而言,

因素空间, 人工智能的新数学理论

因素空间, 人工智能的新数学理论 (2016年香山论坛报告摘要) 汪 培 庄 (辽宁工程技术大学智能工程与数学研究院) 大数据浪潮预示着人类即将经历一场历史上迄今为止最伟大的科学技术革命.它不是后信息革命而是信息革命中的一个的新阶段, 其最根本的特征是Internet 与Intelligence 的二元结合, 简记为 I & I .其中,网络是信息革命的翅膀, 智能是信息革命的灵魂.革命的核心问题仍然是智能,人工智能是这场革命的主战场! 中国学者,尤其是人工智能学者站在国际争夺的时代制高点面前,

Mysql函数集合

Mysql提供了很多函数 提供的常用函数集合 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP(x) 返回值e(自然对数的底)的x次方 FLOOR(x) 返回小于x的最大整数值 GREATEST(x1,x2,...,xn) 返回集合中最大的值 LEAST(x1,x2,...,xn) 返回集合中最小的值 LN(x) 返回x的自然对数 LOG(x,y) 返回x的以y为底的对数 MOD