旧题重做
[ZJOI2016]小星星
容斥是官方做法,不过用集合并卷积也可以推出同样的dp式子。
树形dp,令表示以为根的子树,映射到,子树全体映射到的合法方案数。
考虑给当前的添加一个以为根的子树,令新的以为根的数组为,有:
枚举合法的,余下的就是一个看上去像子集卷积的东西。
然而最终只需要为全集的方案,如果与有交,那么必然小于新的的子树大小,最终不可能对答案产生贡献。
于是考虑去掉的限制,仍然保证答案的正确性,转化为集合并卷积:
于是令表示对最后一维做莫比乌斯变换之后的结果,有:
初始状态下,很容易得到莫比乌斯变换之后的结果。dp中不需要进行反演,保留莫比乌斯变换后的形式计算即可。
最后将根的全集方案数用莫比乌斯逆变换的公式算出来即可,复杂度也是。
[CTS2019]重复
我们记表示将字符串重复次形成的字符串。
显然,我们先正难则反,统计不包含任何有意义字符串(简称为性质)的无限重复串的个数。
根据题意,可以设置一个只含有一个串的AC自动机。对于一个状态,有个字符可以转移到非根节点,假设是,且按照升序排序,剩余字符只能转移到根。那么不难发现,满足性质的串只能从的字符中进行转移(称为合法转移),粗略考虑,发现我们需要统计的是长度为的字符串中,重复无限次仍然始终走合法转移的字符串有多少。
然而重复无限次不太具有可操作性,进一步观察一个串重复无限次后,在自动机上的转移规律。我们令表示从状态接受一个字符串,最终会走到什么状态。可以发现这样一个事实:当足够大的时候,必然有,这是因为所有可能在的后缀中出现的的前缀一定被包含在的后缀中了。因此,如果记,我们就有理由定义,于是,在重复有限次之后,之后的转移都形如,然后不断重复。
不难发现,还可以证明满足这一点的是唯一的,因为如果满足这一点,那么就有,当足够大时,一定被包含在的后缀中,于是就是唯一的。
另一个重要的事实:满足性质,当且仅当都是合法转移。这是因为如果有一个有意义的串出现在了中,它一定会出现无限多次,于是一定会在不断重复的转移中出现,造成一个不合法的转移。
综上所述,我们可以先枚举,统计所有满足的串中,满足性质的串个数:令表示长度为的满足,且都是合法转移的字符串的数目。转移方程容易得到,最后就是答案。这个动态规划是的,还是无法通过本题。
再观察合法转移的性质:由于只能从的字符中进行转移,因此每个点最多只有一个转移不走到根,也就是说,如果不走到根,那么合法转移的路径是唯一的。于是我们枚举从开始,一直走合法转移,第一次走到根的步数。令表示长度为的满足,且都是合法转移的字符串的数目。这种情况的答案就是。如果一次都没有回到根,这样的方案是唯一的,直接走就行。复杂度。
[CTS2019]珍珠
之前推的式子不够优雅!
一句话题意:求
有了的指标作为辅助,推式子的过程可以精简很多:
关键的一步是在枚举以后,一个二元混合多项式被分离成的形式,于是和的部分可以分离,并且的部分结果是显然的:
到了这一步就可以用分治fft大法解决问题了!但是如果想追求更好的做法,可以继续推导。下面关注对的求和:
最后就化成了一个卷积式,可以解决问题。可以发现和并不完全对称,因为的系数前缀和有好的封闭形式。