1. 程式人生 > >【清華集訓】小Y和地鐵

【清華集訓】小Y和地鐵

減少 樹狀 時間 系統 nbsp 數組 技術 image 比較

題目:

小 $\rm Y$ 是一個愛好旅行的 $\rm OIer$。一天,她來到了一個新的城市。由於不熟悉那裏的交通系統,她選擇了坐地鐵。
她發現每條地鐵線路可以看成平面上的一條曲線,不同線路的交點處一定會設有換乘站技術分享圖片。通過調查得知,沒有線路是環線,也沒有線路與自身相交。任意兩條不同的線路只會在若幹個點上相交,沒有重合的部分,且沒有三線共點的情況。即,如圖所示的情況都是不存在的:

技術分享圖片

小 Y 坐著地鐵 $0$ 號線,路上依次經過了 $n$ 個換乘站。她記下了每個換乘站可以換乘的線路編號,發現每條線路與她所乘坐的線路最多只有 $2$ 個換乘站。現在小 $\rm Y$ 想知道,除掉她經過的換乘站以外,這個城市裏最少有幾個換乘站。只有你告訴她正確的答案,她才會答應下次帶你去玩呢。

$n\le 44$

分析:

我們發現,對於兩個換乘站,共有$8$種情況:

技術分享圖片技術分享圖片

技術分享圖片技術分享圖片

技術分享圖片技術分享圖片

技術分享圖片技術分享圖片

考慮我們對每組換乘站進行枚舉,再加上$O(n)$的暴力找交點數,時間復雜度為$O(n8^\left(\frac{n}{2}\right))$,面對$n\le 44$的數據,顯然會$\rm TLE$。

期望得分$\rm 10$。

考慮尋找這$8$種情況有沒有重復。

我們發現,對於第一行的兩種情況,放到一起,會是這樣的:

技術分享圖片

對於這種情況,由於這兩條線產生了一個完全包住$0$號線的環,我們發現對於每一個其他的線,要麽不和這兩條線產生交點,要麽對這兩條線每條都產生一個交點。

所以,不管朝左還是朝右,結果都是一樣的,我們只需要枚舉朝上或朝下即可。

時間復雜度$O(n4^\left(\frac{n}{2}\right))$,期望得分$40$分。

技術分享圖片技術分享圖片

技術分享圖片技術分享圖片

再考慮,能不能繼續減少情況數。

比如,我們把第一列的兩種放到一起。

技術分享圖片

這張圖也構成了環,但是這個環並沒有能把0號線包住,但是這個環把0號線右邊的所有點包住了,也就是在第一個紅點右邊的所有點是不會受到這兩個的選擇的影響的。

然後再來看第一個紅點左邊的情況,如果你是按左端點從左往右搜索的,你會發現到這步的時候紅點左邊已經搜索完了,即在左邊會進出環的點已經全部決定了,而又因為不會對右邊造成影響,所以我們可以貪心地取這兩條環產生交點的最小值。

同理,剩下的也可以這樣處理。

時間復雜度$O(n2^\left(\frac{n}{2}\right))$。

期望得分$\rm 80$分。

搜索的時間復雜度看上去已經很優了,所以我們考慮能不能優化找交點的時間復雜度。

考慮我們若從左往搜索,用$a.l,a.r$表示$a$線路的左端點右端點,若只考慮同向,因為$a.l \lt a.r, b.l \lt b.r\lt a.l \lt b.l$則有三種情況:

$$1)\quad a.l\lt b.l\lt b.r \lt a.r$$

$$2)\quad a.l\lt a.r\lt b.l \lt b.r$$

$$3)\quad a.l\lt b.l \lt a.r \lt b.r$$

顯然,只有情況$3$是相交的。

技術分享圖片

我們發現只有$b.l\lt a.r\lt b.r$我們才需要統計。

是不是很熟悉?你可以使用樹狀數組來進行統計。

每個右端點標記$1$,然後求$[b.l,b.r]$的和即可。

對於朝向問題,顯然左端點的朝向不影響,右端點只有同向才會相交,可以自行畫圖,這邊不作演示。

至於代碼,由於寫的時候比較早,太醜就不放出來了。

有問題請留言。

【清華集訓】小Y和地鐵