CF1383E 题解
题意
给定一个长度为 的 01 串 。在一次操作中,你可以选择任意一个 ,令 ,然后将 删除。你可以进行不超过 次操作,问一共能得到多少种 01 串,答案对 取模。
。
题解
若对操作的序列计数,此题难以处理。我们通过一些转换,对可以得到的串计数。
利用 将串划分,记录每段 的数量。如 就是 。那么可行的操作就是将一个大于 的数减 ,或删除一个不在头尾的 。于是一个串与一个序列一一对应。下面我们对序列计数。
头尾不删,则可以扔掉,最后乘上系数 。此时可知一个长为 的序列 可行的充要条件:存在 满足 。用类似子序列自动机的方式判断。每次向后找到第一个大于等于 的位置并移动指针。
然后可以 。设 表示指针在 ,每次枚举下一个放的数。则有 。单调栈可做到 。
本文作者:realFish的博客
本文链接:https://www.cnblogs.com/fish07/p/17154677.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步