洛谷 for C P1047 校門外的樹

2021-09-25 12:57:28 字數 868 閱讀 6048

雖然沒ac,但記一下也無妨(看看自己的思路到底有多臭多長×

這題的主要難度就在於區域有重合的時候應該怎麼處理,我的第乙個想法是當區域有重合的時候其實就意味著有這兩個重合的區域可以合併為乙個區域,這樣最後去看還剩多少樹的時候就只要把合併過後的所有區域裡面的樹去掉就可以。

因為這是在新手村訓練的陣列分類下的題目所以直接往使用陣列實現方面想了。最直接的想法是用乙個陣列存區域(0-1是乙個區域,2-3是乙個區域這樣),然後每次有新的區域過來的時候遍歷陣列中的所有區域看是否有可以合併的。

是否合併有很多種情況,具體分析一下不要有遺漏,分析過程就不寫了。

因為我是乙個初學c++的小菜雞,對於c++的資料結構還不是太了解,所以直接用了最基礎的需要規定長度的陣列,但事實上這題中陣列的空間不一定都會用到,所以code的時候要注意的一點就是需要有乙個變數記錄下陣列中真正存了有用資訊的size是多大。

可惜的是這個思路寫出來的**沒有ac(只ac了6個測試點,60分,有2個re 2個wa),所以這裡就不貼**了(也沒找出來問題究竟在**×

其實我想得太複雜了,最簡單的方法就是有多少棵樹就建乙個多大的陣列,每個位置相當於乙個標記,區域裡的樹就標記為刪除就好,三個for迴圈就可以搞定

時間複雜度o(2 × l + m × n) 其中n為輸入的區域長度

#include using namespace std;

int main()

for(int i = 0; i < m; i++)}}

int count = 0;

for(int i = 0; i < l+1; i++)

}cout << count;

return 0;

}

題解鏈結

我太蠢了我檢討

洛谷 p1047 校門外的樹

洛谷 p1047 校門外的樹 題目描述 某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點...

洛谷P1047 校門外的樹

輸入輸出樣例 說明code 某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在ll的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表...

洛谷P1047 校門外的樹

某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起始點和終止...