ACMCLUB 板


LINE

※ 引述《DJWS (...)》之銘言: : 這樣問或許很突兀 : 但我很想知道針對每個query 時間複雜度為O(n*d)的解法 : 可以教我嗎? :p #(L=n,H=d) = #(L=n,H>=d) - #(L=n,H>=d-1) 為了估計 #(L=n,H>=d), 把每一個滿足 (L=n,H>=d) 的序列, 作一些手腳: 因為它滿足 H>=d, 所以這一個序列一定在某一個 '(' 的時候, 第一次達到 H=d, 那麼就把從這一個 '(' 之後的每一個 '(' 和 ')' 的方向顛倒過來. 如果說 '(' 增加高度, ')' 降低高度, 原本的序列在結束的時候高度應該回到 0; 而這個動了手腳的序列, 在結束的時候, 高度就應該是 d-(-d) = 2d, 因為不動的部分高度是 d, 而動了的部分原本是要把高度減 d 的, 現在顛倒了就變成增加 d. 再回頭看一下我們動了怎樣的手腳.. 原本在 (L=n,H>=d) 裡的序列, 就是說: 1.這個序列的最高處 高度 >= d, 2.這個序列的高度處處 >= 0, 3.這個序列的高度最後回到 0. 那動了手腳以後, 就是: 1a.這個序列的高度在達到 d 之前, 處處 >= 0, 2a.這個序列的高度在達到 d 之後, 處處 <= 2d, (等價於處處 <= 2d) 3a.這個序列的高度最後到 2d. 原本最高處高度 >= d 這個條件不需要了, 因為這個序列的高度最後會到 2d, 表示它一定會經過高度 = d 的地方, 從一次達到 d 的地方開始把往後的 '(' ')' 顛倒就會得到原本最高處高度 >= d 這個條件的序列; 而序列的高度處處 <= 2d, 是因為如果它有的地方高度 > 2d, 那麼折下來以後就會跑到高度 < 0 的地方; 然後序列的高度在達到 d 之後可以 < 0, 是因為它在顛倒後只是原序列高度 > 2d 的地方. 可以驗證一下, 這剛好是充要條件. 只考慮條件 3a. 的序列共有 C(n, 0.5n+d) 個, 因為: #'(' + #')' = n, 而且 #'(' - #')' = 2d, 所以 #'(' = 0.5n+d, #')' = 0.5n-d 而滿足條件 3a. 卻砥觸 2a. 的序列, 我們估計一下.. 在這種序列達到 2d+1 之後, 把在這個 '(' 後面的所有括號都顛倒過來, 這種序列只需要滿足: 高度最後到 2d+1 - (-1) = 2d+2 所以這種序列共有 C(n, 0.5n+2d+2) 個. 而對於滿足條件 2a. 和 3a. 序砥觸 1a. 的序列, 用白話講這樣的序列, 就是它的高度不會超過 2d, 並且最後會停在 2d, 而在達到 d 之前, 就曾走到 -1 了. 從第一次到達 -1 的 ')' 開始, 把之後的 '(' 和 ')' 倒過來, 所成的新序列會滿足: 1b. 結束時高度會停在 -1 - ( 1 + 2d ) = -2d-2, 2b. 高度處處 < d, 3b. 高度處處 >= -2d-2. 其中 2b. 是反應在走到 -1 之前沒有達到 d; 3b. 是反應原本的處處 <= 2d. 滿足 1b. 的序列有 C(n, 0.5n-2d-2) 個. 滿足 1b. 卻砥觸 2b. 的序列.. (類似滿足 3a. 砥觸 2a. 的情形) 有 C(n, 0.5n+4d+2) 個. 滿足 1b. 和 2b. 卻砥觸 3b. 的序列.. (作類似之前的變換) 就如同滿足下列條件的新序列: 1c. 結束時高度會停在 -2d-4, 2c. 高度在達到 -2d-3 以後, 處處 > -5d-6 (就是處處 > -5d-6), 3c. 高度在達到 -2d-3 以前, 處處 < d. 滿足 1c. 的有 C(n, 0.5n-2d-4), 滿足 1c. 卻砥觸 2c. 的序列有 C(n, 0.5n-8d-8), 滿足 1c. 和 2c. 卻砥觸 3c. 的序列, 就像滿足: 1d. 結束時高度會停在 4d+4, 2d. 高度處處 > -2d-3, 3d. 高度處處 < 6d+6. 滿足 1d. 的有 C(n, 0.5n+4d+4), 滿足 1d. 卻砥觸 2d. 的序列有 C(n, 0.5n-8d-10), 滿足 1d. 和 2d. 卻砥觸 3d. 的序列, 就像滿足: 1e. 結束時高度會停在 8d+8, 2e. 高度在達到 6d+6 以後, 高度處處 < 14d+15 (就是處處 < 14d+15), 3e. 高度在達到 6d+6 以前, 處處 > -2d-3. 滿足 1e. 的有 C(n, 0.5n+8d+8) 個, 滿足 1e. 砥觸 2e. 的有 C(n, 0.5n+20d+22) 個, 滿足 1e. 2e. 砥觸 3e. 的, 就像: 1f. 結束時停在 -12d-14, 2f. 高度處處 < 6d+6, 3f. 高度處處 > -18d-21. ... 一旦 0.5n+?d+? 這東西會超過 n 或小於 0, 這計算就停止了. 所以一定不會超過 O(n) (有可能 O(log n) ) 而這些瑣瑣碎碎的 a→b→c→d→e→f→... 是可以寫個函數把它們的關係寫出來的 b,d,f,... 情形比較類似, a,c,e,... 比較類似, 可以分成兩個函數寫, 也可以分成四個 (如果想把正負號不同的放在不同的函數的話) 再觀察一下, 無果在討論 b→c, d→e, ... 的時候換一下 2 和 3 的順序, 似乎可以單純化為兩個函數就好. 最後, 對於用到的 C(n,?) 若用 Pascal 三角形法來算, 把用到的都求出來, 總共也是花 O(n*d) 的時間. --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.42







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP