题意 给出一个长度为奇数\(n\)的残缺01串,问有多少种补全方法,每次将连续三个位替换为它们的中位数后,能有一种方案使它变为1. \(n \le 3*10^5\) 思路 左边表示栈顶. 将操作简化为:将000变为0:将111变为1:删掉相邻的01或10. 考虑这些操作的优先级,显然是每次有000就执行,没有就执行01或10,都没有再执行 111.同类内部的顺序并不影响结果. 现在考虑用栈维护,从左往右加入串中字符,如果加入了 1,那么栈顶是 0 便可弹掉: 如果加入了 0,由于 000 优先于…