2021 1 20 A 校門外的樹 題解

2021-10-16 18:33:51 字數 1160 閱讀 5869

解法一(思路一):暴力模擬

//a - 校門外的樹 

#include#includeint road[10001];//利用全域性靜態陣列全部初始化為0的特點

int caltree(int endofroad)

return cnt;

}void cutdown(int begin, int end)

int main(void)

int r = caltree(l);

cout << r;

return 0;

}

思路二:數學抽象-求並集問題

但是上面的方法太簡單了,實際上有了兩層迴圈,那麼時間複雜度大概就是o(n²)。有沒有方法可以下降到o(n)甚至o(logn)呢。而實際上這個問題很像有限覆蓋問題。我還沒學拓撲學,但是數軸的覆蓋問題還是可以想出來的。實際上,這個問題就是求並集罷了。那麼對於兩個閉區間,並集要麼是連在一起的(此時有交集),要麼是分立的。所以我們需要乙個方法,儲存閉區間們,而閉區間需要起點和終點,那麼我們只需要兩個陣列儲存區間開頭和結尾就好。(當乙個程式有多個迴圈時,時間取決於最多層的那個迴圈。)

**如下:雖然不可避免的出現了雙層迴圈,但是可以發現,內層迴圈的次數都不多,總體速度還是有優勢。

!這個**只過了樣例(實在改不了qwq,但是覺得這種思路有價值所以還是發出來)

#include#includeint a[10001], b[10001];

int p = 0;//當前儲存位置

bool isintersection(int a1, int b1, int a2, int b2)

void sumset(int begin, int end)

} p++;

a[p] = begin, b[p] = end;

return;

}int caltree()

return res;

}int main(void)

int r = caltree();

cout << l-r+1;

return 0;

}

這裡比較坑的是:

0 1 2 3 4 5 6 7 區間2 5 那麼就是砍了5-2+1=4顆樹,那麼總共有7+1=8個,所以是7+1-4=4個

校門外的樹 題解

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

校門外的樹 (樹狀陣列)題解

校門外的樹 校門外有很多樹,有蘋果樹,香蕉樹,有會扔石頭的,有可以吃掉補充體力的 如今學校決定在某個時刻在某一段種上一種樹,保證任一時刻不會出現兩段相同種類的樹,現有兩個操作 k kk 1,讀入l ll,r rr表示在l ll r rr之間種上的一種樹 k kk 2,讀入l ll,r rr表示詢問l...

校門外的樹

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