口袋里的纸飞机

考虑枚举每个数\(v\),求出网格中包含\(v\)的方案。
考虑正难则反,使用\(r^n\)减去网格中不包含\(x\)的方案。
这要求数列中不能存在两个数\(a_x*a_y=v(\mod p)\)
由于\(p\)是奇质数,所以每个数\(a_x\)会对应唯一的\(a_y\)。特别的,当\(v=0\),\(0\)和所有数互斥。
虽然\(r\)很大,但是\(P\)很小。我们只用关心所有数对\(P\)取模的值。
考虑把所有数按照对\(P\)取模的值分类。
则每个\(<P\)的数只可能出现\(b\)或者\(b+1\)次。
限制可以被变成:
某两个数\(a_x,a_y\)互斥,\(a_x\)\(b,b+1\)种,\(b_x\)\(b,b+1\)种选法。
考虑使用egf描述,当\(a_x\)\(b\)\(b_x\)\(b\)种选法。
还是考虑正难则反,求出任意-都选择的方案数,则生成函数是\(e^{bx}e^{bx}-(e^{bx}-1)(e^{bx}-1)=e^{bx}+e^{bx}-1\)
把相同的项写成幂次形式。
经过若干推导,发现答案可以使用\(n![x^n](e^{bx}+e^{bx}-1)^{v0}(e^{bx}+e^{(b+1)x}-1)^{v1}(e^{(b+1)x}+e^{(b+1)x}-1)^{v2}e^{(r/P)x}\)表示
最后的\(e^{(r/P)x}\)是考虑\(0\)的情况
如果暴力计算,则时间复杂度为\(O(Pn^2)\)
发现本质不同的\(v0,v1,v2\)个数不会超过\(\sqrt{P}\),记忆化即可。
时间复杂度\(O(\sqrt{P}n^2)\)

posted @ 2021-03-07 09:00  celerity1  阅读(84)  评论(0编辑  收藏  举报