某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是11公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸00的位置,另一端在ll的位置;數軸上的每個整數點,即0,1,2,…,l0,1,2,…,l,都種有一棵樹。
由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起始點和終止點的座標都是整數,區域之間可能有重合的部分。現在要把這些區域中的樹(包括區域端點處的兩棵樹)移走。你的任務是計算將這些樹都移走後,馬路上還有多少棵樹。
解題思路
剛一看題目,覺得這個陣列的題重點考察重合部分的處理,以兩個修建區域為例,無外乎三種情況1:兩個不重合;2:兩個重合(乙個包含在另乙個裡);3:部分重合。起初以為單純的把每種情況列出來相加再減去重合部分的樹的數目就可以完成,但是這樣非常複雜。
此題最佳的做法是用標記法,即先建立乙個陣列,令其所有元素為『1』,將每乙個建設區域內的值修改為『0』,這樣即使重合的部分也不用擔心會多減去樹。
#include
#include
intmain()
;//a儲存所有區域的始末位置; lu儲存馬路上的樹的位置
scanf
("%d %d"
,&l,
&m);
for(i=
0;i1;i++
) lu[i]=1
;//l為馬路長度,每棵樹距離1公尺,樹的個數為l+1,這裡將所有樹的位置標記為『1』
for(i=
0;i)for
(i=0
;ifor(i=
0;i1;i++)if
(lu[i]==1
) count++
;//遍歷lu,記錄'1'的個數,即未被占用的樹的數目
printf
("%d"
,count)
;}
C語言 校門外的樹
這題是本人在acm集訓第一天比較卡手的一題,這題說真的在一開始毫無思路,後來才想到用陣列做。某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有...
C語言 校門外的樹
演算法提高 校門外的樹 時間限制 1.0s 記憶體限制 256.0mb 問題描述 某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要...
樹狀陣列 校門外的樹
樹狀陣列 校門外的樹 時間限制 1 sec 記憶體限制 128 mb 題目描述 校門外有很多樹,有蘋果樹,香蕉樹,有會扔石頭的,有可以吃掉補充體力的 如今學校決定在某個時刻在某一段種上一種樹,保證任一時刻不會出現兩段相同種類的樹,現有兩個操作 k 1,k 1,讀入l r表示在區間 l,r 中種上一種...