Problem
給一排棕梠樹的樹高 $H_i$,經過大雪後,高度 $H_i \ge W$ 的樹都會攤倒,挑選一個區間滿足最多五棵屹立不搖的情況下,請問區間長度最長為何?
Sample Input
|
|
Sample Output
|
|
Solution
將會倒的位置記錄下來,線性掃描過去即可。
|
|
給一排棕梠樹的樹高 $H_i$,經過大雪後,高度 $H_i \ge W$ 的樹都會攤倒,挑選一個區間滿足最多五棵屹立不搖的情況下,請問區間長度最長為何?
|
|
|
|
將會倒的位置記錄下來,線性掃描過去即可。
|
|
問在區間 $[a, b]$ 之中最大的 interesting number,所謂的 interesting number 就是分解成數個費波納契數的乘積。
|
|
|
|
由於費波納契數成長速度非常快,用不著擔心會有好幾種不同數構成,因此可以採用中間相遇法,將前幾個小的費波納契數任意組合,後半則是剩餘的組合。至於要從哪裡開始拆團,必須手動測一下。
而這一題詢問次數非常多,儘管建好表,$\mathcal{O}(N \log N)$ 的搜索相當慢,甚至會 TLE,最好使用一次二分搜尋,或者利用單調性質降到 $\mathcal{O}(N)$ 以下最為保險。
|
|
這家公司有自動推論引擎,請問至少要證明幾個基礎定理後,剩餘的都可以藉由推論引擎得到?
|
|
|
|
把這張圖的所有 SCC 元件全部縮成一點,變成 DAG 後,計算有幾個節點的 indegree 等於零,其零的個數就是答案。
|
|
有 $N$ 名員工,他們彼此之間會推薦、相互提拔對方,因此站在公司的角度來看,提拔順序不能違反這張圖的上下關係,亦即若要提拔某人,其推薦他的人全部都要被提拔。請問若要提拔 $A$ 個人,有哪些人一定會被提拔,同樣的,回答提拔 $B$ 個人的情況,最後回答,若提拔 $B$ 個人,誰一定不會被提拔?
|
|
|
|
一定是張 DAG,否則不能處理。對於輸入多存一張反向圖,接著每一次都去找其下屬節點有多少個,藉此構造出任何提拔方案中,最好和最差排名為多少。處理全部排名計算 $\mathcal{O}(V^2 E)$
|
|
給予 $N$ 個大天燈的所在位置,隨後有 $Q$ 個小天燈位置,施放天燈後,請問有多少小天燈處於任三個天燈構成的三角形內部?
|
|
|
|
由於只詢問任意三個點構成的三角形內部,貪心就能想到一定是挑選凸包上的三點,只需要判定某點是不是在凸包內部,由於所有天燈已經給定,只需要跑一次 $\mathcal{O}(N \log N)$ 凸包算法,接著詢問一點是否在凸包內,只需要 $\mathcal{O}(\log N)$。
|
|
給一個由 ^
, _
構成的字串,請湊出最多的 ^_^
子字串。
|
|
|
|
從左掃瞄到右邊,貪心著手容易得到兩種狀態
^
的個數。^???_
的個數,可以從 $h1$ 合併 _
構成。然而有一些特殊案例 ^_^_^^
,需要重新排列,他們之間有巢狀關係 (^_(^_^)^)
,因此建立狀態 $h3$ 為 ^_^???_
,若遇到下一個 ^
貪心拆解成 (^_(^_^)???)
。
|
|
有 $N$ 塊畫布排成一列,並且目標將每一塊畫布變成不同顏色,每一次可以將一個區間塗成相同顏色,花費便是區間 $C_i$ 總和,請問最少花費為何。
|
|
|
|
每一次最多完成一個不同顏色的畫布,那麼著色解法看來就是二元樹,每一個畫布處於葉節點,因此最少花費就相當於編碼長度乘上葉權重最少。
|
|
在炎炎夏日的海邊,需要建立地下通道,把所有海岸飯店聯通在一起,請問最少地下通道個數為何?
|
|
|
|
把這些區間排序,根據左端點由小到大開始貪心,可行解若看成一個區間,隨著區間加入,右端點會逐漸地靠近左端點,若產生無解,勢必要建立一個新通道。不斷地貪心,最後可得到最少通道個數。
|
|
終於把所有練習題都放上 Judge Girl,測資都已經確認過一遍,某 M 打算離開一陣子。「反正是個令人唾棄的助教吧 …」
考試出題總很難讓所有人滿意,老師決定給予學生們選擇考試出題方向,但每一個人只能提出兩種意見,接著老師會出一套方案滿足每一位學生的其中一種意見。由於出一套題步驟繁瑣,把數個意見出在同一題非常困難,最後每一種意見將單獨被出成一道題。
由於助教們要負責出測資、檢驗測資正確與可行性,希望題目數量越少越好,否則助教會忙翻天。現在要找到最少題目來滿足所有學生的需求。
例如 :
只有一組測資,每組第一行會有一個整數 $N$,表示有多少位學生,接下來會有 $N$ 行,每 $i$ 行上會有兩個整數 $A_i, B_i$ 表示第 $i$ 個學生的出題意見。
對於每一組測資輸出一行,表示最少要準備的方案數量能滿足所有學生。
|
|
|
|
DLX
當年在 NCPC 搞不出來的 Problem I Christmas Gifts (NP-hard),在賽後用 DLX 運行效果不錯,在啟發函數加上延遲標記更是屹立排名前數位已久。最近又因為平行把題目挖回來討論,在去年釣到大一學弟來解,便以飛快的速度擊破測資,最後達到加速 20x。再把當初需要跑 30 秒的測資來運行,現在只需要短短的 50ms。
原本要拿來出平行題目,看到這麼驚人的速度,想必就不要出題。
通用解法 DLX 加上啟發式函數就能解決最少重複覆蓋,然而在圖論的最少點集覆蓋問題中,性質又變得更加強烈。當不選某一個點時,必然與其相連的邊為了要覆蓋,另一端必然成為必選點。這時候搜索空間大幅度地下降。若在一般 DLX 算法中提及的最少可能的列中,窮舉某行來覆蓋一些列,那麼就很難看到搜索空間下降的性質。
因此,步驟簡單分成下列步驟:
附錄:和交通大學謝旻錚(Min-Zheng Shieh) 教練的討論
在想確實能用 dancing links 來搞,還要搭配維護 degree order,不過這算法吳邦一老師是說 worst case 為 3 regular graph。
另外先前找過日本人 iwi 的論文,他也搞了個高級 VC solver 並做了測試,詳見論文 Branch-and-reduce exponential/FPT algorithms in practice: A case study of vertex cover, Takuya Akiba, Yoichi Iwata
|
|
給一個平行兩軸的簡單多邊形花圃以及一堆蔬菜的座標,請問有多少蔬菜在柵欄的外部,把那些在外部的蔬菜編號加總後輸出。
|
|
|
|
判斷一個點是否在簡單多邊形內部可以使用射線法,然而有很多點詢問,單筆詢問複雜度 $\mathcal{O}(N)$,這樣很明顯地會 TLE。
為了加速判斷,採用掃描線算法,依序放入平行 x 軸的線段,掃描過程中離線詢問某點往 y 軸負方向的射線交點個數為何,維護求交點個數可以利用 binary indexed tree 維護前綴和,前綴和相當於射線交點個數。就能在 $\mathcal{O}(N \log N)$ 完成所有詢問。
|
|