题解 P6000 [CEOI2016] match
Find_Yourself · · 题解
暴力1:直接 dfs 枚举每个位置状态,复杂度
暴力2:考虑贪心,如果一个左括号有多个合法的右括号匹配,则一定选最靠右的,而一对括号匹配当且仅当字符相同且中间部分可以完全匹配。
怎么判断能否一段连续区间可以完全匹配呢?我们可以用栈模拟!
假设该区间为
而栈的形态我们可以用字符串哈希记录。
所以我们只需要
正解:现在的瓶颈是如何
我们可以每个点的哈希值离散化并存入 vector 中进行分类。
然后对于当前状态 dfs(l, r),二分坐标在 vec[hash[l]] 中进行 upper_bound。
最后复杂度均摊下来就是
code