集合的并
2017-02-13 15:32
295 查看
给出两个由整数组成的集合
A ,
B ,计算
A ∪
B 中包含多少个整数。 Input
输入的第一行包含一个整数
T (
T > 0),表示一共有
T 组测试数据。
对于每组测试数据,第一行包含一个整数
n (1
≤ n
≤ 10
5 )。第二行包含2
n 个整数
a 1
, b
1 ,
a 2
, b
2 , ...,
a n
, b
n
(0 < a
1 ≤
b 1
< a
2 ≤
b 2
< ... < a
n ≤
b n
< 10
9 ),表示
A = [
a 1
, b
1 ]
∪ [
a 2
, b
2 ]
∪ ...
∪ [
a n
, b
n
]。第三行包含一个整数 m
(1 ≤
m ≤
10 5
)。第四行包含2 m
个整数 c
1 ,
d 1
, c
2 ,
d 2
, ..., c
m ,
d m
(0 <
c 1
≤ d
1
< c
2 ≤
d 2
< ... < c
m ≤
d m
< 10
9 ),表示
B = [
c 1
, d
1 ]
∪ [
c 2
, d
2 ]
∪ ...
∪ [
c m
, d
m
]。
这里[ x
, y
]表示由 x
, y
之间(包含
x ,
y )所有整数组成的集合。
Output
对于每组测试数据,输出
A ∪
B 中包含多少个整数
。
Sample Input
Sample Output
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}。
这道题当时做了很久都没做出来。。。经过别人帮助才想明白。就是先定义结构体p里面包含x,y,x代表起点,y代表终点,按照x进行升序排序,按顺序访问排好序的起点终点,分情况进行运算求结果。
A ,
B ,计算
A ∪
B 中包含多少个整数。 Input
输入的第一行包含一个整数
T (
T > 0),表示一共有
T 组测试数据。
对于每组测试数据,第一行包含一个整数
n (1
≤ n
≤ 10
5 )。第二行包含2
n 个整数
a 1
, b
1 ,
a 2
, b
2 , ...,
a n
, b
n
(0 < a
1 ≤
b 1
< a
2 ≤
b 2
< ... < a
n ≤
b n
< 10
9 ),表示
A = [
a 1
, b
1 ]
∪ [
a 2
, b
2 ]
∪ ...
∪ [
a n
, b
n
]。第三行包含一个整数 m
(1 ≤
m ≤
10 5
)。第四行包含2 m
个整数 c
1 ,
d 1
, c
2 ,
d 2
, ..., c
m ,
d m
(0 <
c 1
≤ d
1
< c
2 ≤
d 2
< ... < c
m ≤
d m
< 10
9 ),表示
B = [
c 1
, d
1 ]
∪ [
c 2
, d
2 ]
∪ ...
∪ [
c m
, d
m
]。
这里[ x
, y
]表示由 x
, y
之间(包含
x ,
y )所有整数组成的集合。
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}。
这道题当时做了很久都没做出来。。。经过别人帮助才想明白。就是先定义结构体p里面包含x,y,x代表起点,y代表终点,按照x进行升序排序,按顺序访问排好序的起点终点,分情况进行运算求结果。
#include<iostream> #include<algorithm> using namespace std; #define max 200000 struct line { int x,y; }p[max]; bool cmp(line a,line b) { return a.x<b.x; } int main() { int T,n,m,i,c,sum; cin>>T; while (T--) { c=0; sum=0; cin>>n; for (i=0;i<n;i++) cin>>p[i].x>>p[i].y; cin>>m; for (i=n;i<n+m;i++) cin>>p[i].x>>p[i].y; sort(p,p+n+m,cmp); for (i=0;i<n+m;i++) { if (p[i].x>c) c=p[i].x; if (p[i].y>=c) { sum=sum+p[i].y-c+1; c=p[i].y+1; } } cout<<sum<<endl; } return 0; }
相关文章推荐
- mybatis实战教程(mybatis in action),mybatis入门到精通
- Firebug常见错误:SyntaxError:missing variable name
- 计算机硬件架构四
- 你真的了解BOM中的history对象吗
- Picasso的使用总结
- sqlcipher加密数据库
- 最短子数组
- VirtualBox 安装Centos7 无法上网 ping不同的解决方法
- 腾讯云CVM使用记录--使用root权限
- 计算机相关专业经典图书推荐
- 数据库自增主键可能产生的问题
- 题目1480:最大上升子序列和
- 矩阵的逆
- 方法的重载与重写
- OpenCV for Android打开相机
- 中医行业与软件行业的职业发展比较
- 获取checkbox的值传给后台
- assert()函数用法总结
- 第三周作业
- ARM概述