某校大門外長度為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門課的成績 語文 數學 英語。先按總分從高到低排序,如果兩個同學總分相同,再按語文成績從高到低排序,如果兩個同學總分和語文成績都相同,那麼規定學號小的同學排在前面,這樣,每個學生的排序是唯一確定的。任...