Problem
每一個主字串,接著根據一大堆規則, 依序 將字母做替換。
Sample Input
|
|
Sample Output
|
|
Solution
由於主字串可能很長,不用針對每次詢問將每一個主字串都拿來修改。只需考量每一種字符轉換的可能,例如源頭 ‘A’ -> ‘Z’, ‘B’ -> ‘X’, ‘C’ -> ‘Z’, … 那麼,接下來遇到 ‘Z’ -> ‘W’,只需要針對 ‘A’ -> ‘W’, ‘C’ -> ‘W’ 即可。
因此,每一次詢問最多消耗 O(26) 完成。
|
|
每一個主字串,接著根據一大堆規則, 依序 將字母做替換。
|
|
|
|
由於主字串可能很長,不用針對每次詢問將每一個主字串都拿來修改。只需考量每一種字符轉換的可能,例如源頭 ‘A’ -> ‘Z’, ‘B’ -> ‘X’, ‘C’ -> ‘Z’, … 那麼,接下來遇到 ‘Z’ -> ‘W’,只需要針對 ‘A’ -> ‘W’, ‘C’ -> ‘W’ 即可。
因此,每一次詢問最多消耗 O(26) 完成。
|
|
寒冷的冬天,為街道上的人鋪設毛毯,現在有 n 個無限長毛毯,每一個毛毯都有其紋路,呈現厚薄厚薄厚薄 … 的順序,其中厚的長度為 ai,而薄的長度為 bi - ai。
現在長度為 1…m 的街道,請問蓋到 1 件、2 件、3 件、 …、n 件薄毛毯的人分別有多少人。
|
|
|
|
看到 ai, bi <= 16。
窮舉每個人,O(16)
計算蓋到幾件薄毛毯。
如果用 O(nm) 顯然太慢,由於 bi 很小,針對所有可能,預建表得到循環下累計結果。
|
|
有一套撥花瓣遊戲,一朵花有 n 片花瓣,每一片花瓣分別位置在 1…n,呈現環狀,首尾相連。兩個人輪流撥花瓣,每一次撥一片、或者撥相鄰的兩片,最後一個取走花瓣的人輸。
給已經撥去花瓣,請問現在她先手會不會勝利?
|
|
|
|
看出是一道 SG 博奕遊戲,假設有 n 個連續花瓣,取中間一片、或連續兩片,將會變成兩段連續花瓣,藉此建造 SG 函數,求出連續 n 個連續花瓣的 SG 值,隨後統計有多少段連續花瓣,並且各自擁有多少花瓣,接著套用 nim 遊戲得到結果。
特別小心是環狀的,題目沒有描述得很清楚。
|
|
給定一個主字串 S,接著數筆詢問有多少不同的子字串以 X 開頭、Y 結尾。
|
|
|
|
由於題目是要找不同的子字串,必然會造成比對速度上的問題,由於主子串長度最多 1000,而詢問的 X、Y 長度都小於 10,顯然地窮舉是相當有利。但是詢問次數最多 50000,窮舉起來必須有效率地映射到答案中,因此建議離線把詢問建成一個 Trie,同時避免重複的詢問。
窮舉每個子字串,為了加速匹配,最多跑 O(len * len * 10 * 10)
,當決定子字串為 [l, r]
時,遞增起頭指針、遞減結尾指針,對於每一組詢問串成 X#inv(Y)
,那麼只需要循序走訪一棵 trie,如此一來速度就提升了不少。
接著考慮如何去重複,關鍵點在於窮舉每個子字串,也依序插入 trie 中,當有新增新的節點時再進行答案的驗證。
也許這類型的題目可以先建造一個 suffix tree,然後想辦法詢問,仔細想想不容易就放棄。
|
|
現在有位歌手,要舉辦演唱會,在各地的百貨公司打算邀請歌手來演唱,藉以吸引更多的顧客來消費。每個百貨公司提供在哪一天歌手來演唱時可以得到的獲益,歌手必須自費從另一個地點到另一個地點,因此會給定兩地之間的自費費用。可以留在原地。
求歌手在 m 天內可以獲得的最大利益為何,假設第一天到任何場地都是 0 花費,沒有指派最後一天所在的位置。
|
|
|
|
定義狀態 dp[stores][days]
,在第幾天到哪一個城鎮。
|
|
N 個人不同高,現在佔一排,任挑三個人的身高從左向右的相對高度,不存在矮、高、中的情況有多少種。
|
|
|
|
卡塔蘭數 (Catalan number)。
每一次考慮加入一個最高的人,窮舉最高的人應該佔在哪個位置,則其左、右側也要滿足定義,同時左側的人都要比右側的人高。最後得到公式如下,與卡塔蘭數相同。
|
|
有 N 個人的愛書俱樂部,他們會喜歡某些人的書,如果相互喜歡對方的書就可以進行交換,現在要問的是否每個人都能找到能夠交換的對象,讓每個人都獲得新書。
如果 A -> B, B -> C, C -> A,那麼他們可以環狀地交換新書。
|
|
|
|
每個人只能找一個對象進行交換,找二分圖的 perfect matching。
二分圖中左側是每個人,右側是想要交換的對象,兩邊的個數都是 N。匹配完會找到數個環狀,這就是最後的交換情況。然而由於點數很多,用匈牙利算法可以減枝來加快,每一次擴充路徑都必須得成功。如果使用 maxflow,則盡可能減少邊的無效使用。
當然可以使用 maxflow 貪心預流、匈牙利貪心匹配過後,再套用算法,速度有可能會快上許多,以下的模板還真好用,減少無效使用於分層圖,所以速度快上很多。
|
|
在國家公園的步行路道上要在兩側放置花卉,而主辦單位認為只要在其中兩個重要景點的最短路徑上的道路放置即可。通常大部分人只會走最短路徑。
請問總花費為何?
|
|
|
|
最短路徑可能有數條,因此要窮舉每一條邊是否在最短路徑上,已知景點分別為 st 和 ed ,那麼找到 st -> u 和 ed -> v 的單源最短路徑,接下來窮舉 u -> v ,加上 st -> u 和 v -> ed ,得到 st -> u -> v -> ed 的最少花費,檢查是否等於最短路徑長即可。
這一題是雙向圖,如果是單向圖則要反轉邊,才能對 ed 進行單源最短路徑 (SSSP)。在這一題寫 SSSP 使用 SPFA 算法,也許 dijkstra 也是挺不錯的。
|
|
現在給定格子狀的街區,每一個街區只會與垂直、水平的相鄰街區有通行的人行道。現在已知每個街區有多少人行道,求未知的街區人行道數量情況。
|
|
|
|
二分圖黑白染色,知道每一個只會與相鄰上下左右的街區相鄰,那麼就像國際象棋一樣的黑白染色,相鄰的人行道一定只會連接於黑跟白之間。
分別計算黑和白的 degree 總數,差的絕對值就是未知街區的答案。
|
|
stackoverflow : Decomposing a relation into BCNF.
資料庫講到正規化,針對 1NF, 2NF, 3NF 的做法。正規化的目的
-要避免資料重複或相互矛盾的情形,並使資料庫在使用時能更有效率、更容易維護。
關於 1NF, 2NF, 3NF 的細節操作就上網查吧。也就是在還沒正規化前,可能會遭遇到
現在給定 relation 和 functional dependencies,正規化它們!
舉個例子:(直接從 stackoverflow 的例子來說)
Functional dependencies 簡單來說就是一個決定性的一對多、或者是一對一的相依關係,可以根據 LHS (left hand side) 決策 RHS (right hand side),當然 function dependencies 的訊息只有部分,也暗示著具有遞移關係。因此例如 A->B, B->C 則可以推論出 A->C 。
定義 X+ 為 X 的遞移閉包,因此假設知道 A->B, B->C 則 {A}+ = {A, B, C} ,假設知道 AB->C 則 {A, B}+ = {A, B, C}
回到例子,每一步要找到違反 BCNF 規則 (violates BCNF) 的 R’ 進行拆分。怎麼樣才算違反 BCNF 規則?可以找到一個 X != X+ != [R’ all attributes] ,就可以對 R’ 進行拆分。
|
|
在程式實作 (非人工) 的時候,如何找到 X 滿足上述的條件很重要,由於 X 是所有變數的 subset 情況,相當於 O(2n) ,很多項目是無用的。假如 R’ = ABE ,針對 X = AC 是無效的操作,基本上只要拿所有 function dependencies 的 X = LHS 進行測試即可?這貪心的做法應該是對的。
|
|
說真的,老師上課講的練習答案還有錯,講算法時也不夠確切,真不知道教授怎麼教的,還是我沒認真上課。當教授發現全班答題有極端的相似錯誤時,到底是我們學不好?還是他沒教好?教授一點都不會反思。
|
|
|
|
|
|