AcWing寒假每日一題 Day8校門外的樹

2021-10-16 04:58:15 字數 2184 閱讀 6716

某校大門外長度為l

ll的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1

11公尺。

我們可以把馬路看成乙個數軸,馬路的一端在數軸0

00的位置,另一端在l

ll的位置;數軸上的每個整數點,即0,1

,2,…

…,l,

0,1,2,……,l,

0,1,2,

……,l

,都種有一棵樹。

由於馬路上有一些區域要用來建地鐵。

這些區域用它們在數軸上的起始點和終止點表示。

已知任一區域的起始點和終止點的座標都是整數,區域之間可能有重合的部分。

現在要把這些區域中的樹(包括區域端點處的兩棵樹)移走。

你的任務是計算將這些樹都移走後,馬路上還有多少棵樹。

輸入格式

輸入檔案的第一行有兩個整數l

ll和m,l

m,lm,

l代表馬路的長度,m

mm代表區域的數目,l

ll和m

mm之間用乙個空格隔開。

接下來的m

mm行每行包含兩個不同的整數,用乙個空格隔開,表示乙個區域的起始點和終止點的座標。

輸出格式

輸出檔案包括一行,這一行只包含乙個整數,表示馬路上剩餘的樹的數目。

資料範圍

1 ≤l

≤10000

,1≤l≤10000,

1≤l≤10

000,

1 ≤m

≤100

1≤m≤100

1≤m≤10

0輸入樣例:

500

50050033

3150

15015

0300

30030

0100

10010

0200

20020

0470

47047

0471

47147

1

輸出樣例:

298

29829

8

分析:此題一看就是區間合併問題,不過也可以用暴力的做法做

#include.h>

using namespace std;

const int n=

1e6+5;

bool a[n]

;int main()

}for

(i=0

;i<=l;i++)}

cout<

}

也可以用差分優化一下:

#include.h>

using namespace std;

const int n=

1e6+5;

bool a[n]

;int b[n]

;int main()

for(i=

0;i<=l;i++)}

cout<

}

優化演算法:區間合併,我以前發過文章:區間合併

#include.h>

using namespace std;

const int n=

1e6+5;

struct nodea[n]

,b[n]

;bool cmp

(node a,node b)

int main()

sort

(a,a+m,cmp)

; int right=a[0]

.r,left=a[0]

.l,ans=

1,sum=0;

b[ans]

.l=left,b[ans]

.r=right;

for(i=

1;i)else

} b[ans]

.l=left;

b[ans]

.r=right;

for(i=

1;i<=ans;i++

) cout<

1<

}

acwing寒假每日一題題解

貨倉選址 頭兩天的每日一題有點水 include using namespace std int s 505 505 int i,j intmain void 語法題蛇形添數 輸入兩個整數n和m,輸出乙個n行m列的矩陣,將數字 1 到 n m 按照回字蛇形填充至矩陣中。具體矩陣形式可參考樣例。輸入格...

acwing 寒假每日一題題解

本篇部落格是基於acwing活動中的寒假每日一題 活動位址 在一條數軸上有 n 家商店,它們的座標分別為 a1 an。現在需要在數軸上建立一家貨倉,每天清晨,從貨倉到每家商店都要運送一車商品。為了提高效率,求把貨倉建在何處,可以使得貨倉到每家商店的距離之和最小。輸入格式 第一行輸入整數n。第二行n個...

AcWing寒假每日一題 Day9獎學金

某小學最近得到了一筆贊助,打算拿出其中一部分為學習成績優秀的前5名學生發獎學金。期末,每個學生都有3門課的成績 語文 數學 英語。先按總分從高到低排序,如果兩個同學總分相同,再按語文成績從高到低排序,如果兩個同學總分和語文成績都相同,那麼規定學號小的同學排在前面,這樣,每個學生的排序是唯一確定的。任...