传送门


CTS的计数题更完辣(撒花

Orz zx2003,下面的内容在上面的博客基础上进行一定的补充。

考虑计算无限循环之后不存在子串比\(s\)字典序小的串的个数。先对串\(s\)建立KMP自动机,那么对于点\(i\)连出的所有边,只有不是回到起点的字符最大的那条边以及字符比它大的走向起点的边可以走,因为如果走其他边,那么当前匹配的串就会存在一个后缀比\(s\)字典序小。

经过这样的删边后,对于每一个点只有两种边,一种是去往另一个点的边,一种是去往起点的边。如果不考虑去往起点的边,与起点连通的连通块刚好构成一个rho的形状(也就是\(\rho\),即一条从起点开始的链,链底是一个环)。我们考虑在这个rho上计数。

不妨设当前构造的满足条件的串是串\(t\)。有一个引理:设\(a_0 = 0\),\(a_i =\)从KMP自动机上的\(a_{i-1}\)号点开始匹配串\(t\)走到的位置,可以得到一个长度无限的序列\(a\),在序列\(a\)上必定存在一个位置\(x\)满足\(\forall y > x , a_y = a_x\)。

证明:\(a_x\)实质上就是把\(x\)个\(t\)串拼在一起放在KMP自动机上匹配最后到达的节点。因为如果\(t\)合法,那么\(t\)只会走每个点字符最大的一条边和比这个字符更大的回到起点的边,所以将\(x\)个\(t\)串放在现在的KMP自动机上匹配等价于将\(x\)个\(t\)串放在没有删边之前的KMP自动机上匹配,而在后者意义下匹配完到达的节点表示\(x\)个\(t\)串的最长后缀满足它是\(s\)的前缀。当\(x|t|>|s|\),因为在后面加上一个\(t\)相当于在前面加上一个\(t\),而此时加上一个\(t\)不可能对最长后缀的长度产生影响,所以再加上一个\(t\)进行匹配,仍会匹配到之前的节点。

显然这个匹配到的节点是唯一的,所以我们可以枚举这个节点,那么我们需要求的就是长度为\(m\)的路径条数满足起点和终点都是这一个点。

如果从一个节点开始匹配串\(t\),没有经过起点回到自己,那么一定是在rho上转,方案数唯一。

接下来考虑回到起点的情况。考虑一个dp:设\(f_{i,j}\)表示从起点开始走\(i\)步走到节点\(j\)的方案数,这个可以直接做。接下来我们枚举从这个节点沿着\(\rho\)走了多少步回到根,用回到根的方案数乘上从起点经过若干步到达当前节点的方案数贡献答案。

总复杂度\(O(n^2)\)。

接下来使用多项式运算优化上面后半部分计算的复杂度。

上面枚举的路径相当于三个过程:从当前节点开始走到起点->走若干次起点到起点的路径->从起点走到当前节点停下来,而第一个过程和第三个过程合起来等价于先枚举一个从起点开始走回起点的路径,然后再在这条路径上选择一个点作为匹配终点。那么先枚举这条路径,对于一条长度为\(x\)的路径,就有\(x\)种选择匹配终点的方式。

不妨设\(F = \sum\limits_{i=1}^\infty f_ix^i\),其中\(f_i\)表示从起点开始走\(i\)步走回到起点的方案数,这个可以在KMP自动机建立之后计算。那么枚举第一个过程和第三个过程的路径的并,方案数的多项式就是\(x F'\)。接下来再枚举经过了多少次起点,需要乘上多项式\(\sum\limits_{i=0}^\infty F^i = \frac{1}{1 - F}\),那么最终的答案就是\([x^m] (xF' \times \frac{1}{1 - F} + 1)\),最后加上的\(1\)是一个余项。

代码:\(O(n^2)\)

代码:\(O(nlogn)\)

LOJ3123 CTS2019 重复 KMP自动机、DP、多项式求逆的更多相关文章

  1. CF848E Days of Floral Colours——DP+多项式求逆/分治NTT

    官方题解:http://codeforces.com/blog/entry/54233 就是由简入繁 1.序列处理,只考虑一个半圆 2.环形处理(其实这个就是多了旋转同构) 然后基于分割线邻居的跨越与 ...

  2. BZOJ 3456: 城市规划(dp+多项式求逆)

    传送门 解题思路 这道题就是求带标号的无向连通图个数,首先考虑\(O(n^2)\)的做法,设\(f_i\)表示有\(i\)个节点的无向连通图个数,那么考虑容斥,先把所有的无向图求出,即为\(2^{C( ...

  3. 【bzoj3456】城市规划 dp+多项式求逆

    Description 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得整个国家的任意两个城市都直接或 ...

  4. BZOJ 3456: 城市规划 与 多项式求逆算法介绍(多项式求逆, dp)

    题面 求有 \(n\) 个点的无向有标号连通图个数 . \((1 \le n \le 1.3 * 10^5)\) 题解 首先考虑 dp ... 直接算可行的方案数 , 容易算重复 . 我们用总方案数减 ...

  5. 【bzoj3456】城市规划(多项式求逆+dp)

    Description 求\(~n~\)个点组成的有标号无向连通图的个数.\(~1 \leq n \leq 13 \times 10 ^ 4~\). Solution 这道题的弱化版是poj1737, ...

  6. [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆)

    [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆) 题面 一棵二叉树的所有点的点权都是给定的集合中的一个数. 让你求出1到m中所有权 ...

  7. Luogu4233 射命丸文的笔记 DP、多项式求逆

    传送门 注意到总共有\(\frac{n!}{n}\)条本质不同的哈密顿回路,每一条哈密顿回路恰好会出现在\(2^{\binom{n}{2} - n}\)个图中,所以我们实际上要算的是强连通有向竞赛图的 ...

  8. [BZOJ3456]城市规划:DP+NTT+多项式求逆

    写在前面的话 昨天听吕老板讲课,数数题感觉十分的神仙. 于是,ErkkiErkko这个小蒟蒻也要去学数数题了. 分析 Miskcoo orz 带标号无向连通图计数. \(f(x)\)表示\(x\)个点 ...

  9. bzoj 3456 城市规划——分治FFT / 多项式求逆 / 多项式求ln

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3456 分治FFT: 设 dp[ i ] 表示 i 个点时连通的方案数. 考虑算补集:连通的方 ...

随机推荐

  1. [USACO09DEC] Dizzy Cows 拓扑序

    [USACO09DEC] Dizzy Cows 拓扑序 先对有向边跑拓扑排序,记录下每个点拓扑序,为了使最后的图不存在环,加入的\(p2\)条无向边\(u,v\)必须满足\(u\)拓扑序小于\(v\) ...

  2. javascript 百度地图无秘钥(appkey)创建marker标记地图

    创建简单的marker地图不一定需要去百度地图申请key,简单代码实现marker地图,效果如图: html代码如下,代码中的baidu.api.js参考后面的隐藏代码: <!DOCTYPE h ...

  3. shell脚本编程基础知识点

    整数比较: -eq:测试两个整数是否相等:相等为真,不等为假 -ne:测试两个整数是否不等:不等为真,相等为假 -gt:测试一个数是否大于另一个数:大于为真,否则为假 -lt:测试一个数是否小于另一个 ...

  4. 微信小程序 base64格式图片的显示及保存

    当我们拿到如下base64格式的图片(如下图)时, base64格式的图片数据: 如何显示 ? 使用image标签,src属性添加data:image/png;base64, (注意:若imgData ...

  5. hdfs、yarn集成ranger

    一.安装hdfs插件 从源码安装ranger的服务器上拷贝hdfs的插件到你需要安装的地方 1.解压安装 # tar zxvf ranger-2.1.0-hdfs-plugin.tar.gz -C / ...

  6. 大量数据通过Phoenix插入到hbase报错记录(2)

    错误: Caused by: java.sql.SQLException: ERROR (INT10): Unable to find cached index metadata 解决办法: 在hba ...

  7. Vue 自定义编译打包路径

    在 vue.config.js 文件下添加 outputDir 配置项: module.exports = { outputDir:"my_target_direct", // o ...

  8. 两个对象值相同 (x.equals(y) == true) ,但却可有不同的 hash code ,这 句话对不对

    答:不对,有相同的 hash code这是java语言的定义:1) 对象相等则hashCode一定相等:2) hashCode相等对象未必相等 1.如果是基本变量,没有hashcode和equals方 ...

  9. ArgumentException: The Assembly Mono.WebBrowser is referenced by System.Windows.Forms ('Assets/Plugins/System.Windows.Forms.dll'). But the dll is not allowed to be included or could not be found.

    最近有个项目要用到System.Windows.Forms.dll,在Unity编辑器里用着还好好的,但是一导出就给我报错,让我十分不爽. 于是请教百度,搜出了五花八门的答案,没一个能解决我的问题的, ...

  10. odoo开发笔记--定时任务源码分析

    场景描述: 处理思路: 参考文章: 定时任务相关: https://www.jianshu.com/p/ad48239f84d6 https://blog.csdn.net/M0relia/artic ...