【省选模拟】20/06/09_数位

  • 考虑求出循环节后就可以取模了
    直接【省选模拟】20/06/09_循环节_02【省选模拟】20/06/09_循环节_03可以得到【省选模拟】20/06/09_子树_04
    数列类似斐波那契,循环节可以直接求,​证明​ 复杂度 【省选模拟】20/06/09_子树_05 甚至可以 【省选模拟】20/06/09_子树_06,​【省选模拟】20/06/09_数位_07

【省选模拟】20/06/09_数位_08

  • 考虑一个组合意义,即确定排列和划分过后,每一段选择一对,若所有对都构成逆序对则产生 1 的贡献,对每个都为逆序对的概率进行计数,奇数位和奇数位的贡献可以简单计算,问题就是如何考虑偶数位和奇数位的贡献
    按大小关系可以建边,小的连向大的,那么偶数位可以串成一条链
    奇数位的贡献可以看成链上挂了若干个连入和连出的边,连出的边是没法搞的,按照氪金手游容斥
    考虑这颗内向树它合法的概率,钦定根为子树最大值,我们要做的就是对所有内向树合法的概率求和
    考虑这个概率是【省选模拟】20/06/09_子树_09,而每次连出去一个奇数点相当将一个【省选模拟】20/06/09_子树_10改成 1,
    【省选模拟】20/06/09_循环节_11表示到【省选模拟】20/06/09_子树_12分了【省选模拟】20/06/09_子树_13段,子树大小为【省选模拟】20/06/09_循环节_14的概率之和(这对应着连出去的边有【省选模拟】20/06/09_循环节_14条),这里【省选模拟】20/06/09_循环节_16的概率最后算上,那么容易发现
    【省选模拟】20/06/09_循环节_17
    【省选模拟】20/06/09_子树_18,注意这里算的是所有排列中满足内向树合法的概率,而偶数位本身是排好序的,所以上述贡献要乘上【省选模拟】20/06/09_循环节_19,​​【省选模拟】20/06/09_数位_07

【省选模拟】20/06/09_循环节_21

  • 回文自动机统计每个串的最长回文后缀的所有没有出现过的前缀,出现过的前缀存在一个最大长度【省选模拟】20/06/09_子树_22,对应后缀数组上的一段区间,对这个长度二分即可,​​【省选模拟】20/06/09_数位_07