您的位置:首页 > 其它

集合的并

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
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},

∪  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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: