給出兩個由整數組成的集合
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;
}