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灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP