給出兩個由整數組成的集合a,
b,計算a
∪ b中包含多少個整數。輸入的第一行包含乙個整數t (t > 0),表示一共有t組測試資料。
對於每組測試資料,第一行包含乙個整數n (1
≤ n ≤ 105)。第二行包含2n個整數a1,
b1,a2,
b2, ...,
an,bn (0 <
a1≤
b1 <
a2≤
b2 < ... <
an≤
bn < 109),表示a
= [a1,
b1]∪ [a2,
b2]∪ ...
∪ [an,
bn]。第三行包含乙個整數m
(1 ≤
m ≤ 105)。第四行包含2m個整數c1,
d1,c2,
d2, ...,
cm,dm (0 <
c1≤
d1 <
c2≤
d2 < ... <
cm≤
dm < 109),表示b
= [c1,
d1]∪ [c2,
d2]∪ ...
∪ [cm,
dm]。
這裡[x,
y]表示由x,
y之間(包含x,
y)所有整數組成的集合。對於每組測試資料,輸出a
∪ b中包含多少個整數。3
17 7
13 3
21 2 3 4
12 3
21 2 4 6
31 3 6 7 9 102
49對樣例1的解釋:a = ,b = ,a
∪ b = 。
對樣例2的解釋:a = ,b = ,a
∪ b = 。
對樣例3的解釋:a = ,b = ,a
∪ b = 。
中南大學第八屆大學生程式設計競賽
//可以把a,b,都當成多條線段的集合,然後,排序,去重,那麼最後結果就是問所有的線段包含了多少個整數。通過結構體把a,b繫結起來,然後排序,先按左邊小的排,在按右邊大的排,這樣是為了覆蓋重複的。
#include
#include
#include
using namespace std;
const int maxn=200005;
int n,m;
struct point
f[maxn];
bool mycomp(const point &a,const point &b)
void solve()
}printf("%d\n",ans);
}int main()
{ int t,i;
scanf("%d",&t);
while(t--)
{scanf("%d",&n);
for(i=0;i
NC15167 集合問題(並查集)
這道題目思維量還是挺大的,因為這道題也是維護集合關係,所以我們想到用並查集去維護。我們應該想到的是,用map對映一下位置,因為原來的資料比較大,不宜維護並查集關係,並且設計兩個原點 0 和n 1,表示ab集合,這招是常見手段,因為這兩個點是特殊的。之前有到異或並查集也是設計乙個另外的原點 又因為x和...
L2 005 集合相似度 (25 分)(集合求並)
l2 005 集合相似度 25 分 思路 不相同就是去除重複,然後兩個集合的相似度就是它們的交集 並集。c 提供了set函式可以很簡單的求出集合的交集合併。具體函式使用 所以先插入集合,然後求交集就好了。include include include include include includeu...
P1621 集合 尤拉篩 並查集
題目鏈結 這個題要求我們在乙個區間 a,b 中找出幾個集合,集合中的數滿足是乙個大於等於p的質因數的個數。看到集合這個定義,我們瞬間會想到用並查集來維護這個集合,那麼對於這個集合,他滿足乙個性質,就是如果我們,起始的時候初始化每乙個數的父親都是自己,那麼每乙個集合中有且只有乙個數的父親 是自己。根據...