ARC147F题解

最巧妙的一步:把问题变成有一个长为 M = X + Y + Z + 3 M=X+Y+Z+3 M=X+Y+Z+3 的环,环上的点标号为 0 0 0 M − 1 M-1 M1,第一个人初始在 0 0 0 号点,第二个人初始在 X + 1 X+1 X+1 号点,第三个人初始在 X + Y + 2 X+Y+2 X+Y+2 号点,从 1 1 1 n n n 枚举 i i i,如果 S i S_i Si A \text{A} A,那么第一个人坐标加一模 M M M;如果 S i S_i Si B \text{B} B,那么第二个人坐标加一模 M M M;否则第三个人坐标加一模 M M M。那么限制相当于任意时刻三个人位置两两不同。
先假定所有方案是合法的,容斥掉不合法的即可。
如果某种不合法方案最后三个人的位置两两不同,那么找到最早的时刻 t t t 使得 t t t 时刻有两个人 x , y x,y x,y 位置重合,可以发现因为最后三个人位置两两不同所以 x , y x,y x,y 这两个人至少有一个人在 t t t 时刻是动了的,而因为两人重合了所以 t t t 时刻之后两人是不作区分的,于是把这种不合法方案在 t t t 时刻之后 x x x y y y 的移动交换一下可以得到另一种不合法方案。因为最后输出答案模2,这些不合法方案就两两抵消了。
现在剩下的不合法方案只有最后时刻至少有两个人位置相同的了。减掉第一个人和第二个人最后重合的方案数,再减掉第二个人和第三个人最后重合的方案数,再减掉第一个人和第三个人最后重合的方案数,可以发现这样三个人最后都在一个位置的方案减了3次,我们希望只减1次,不过由于只用输出答案模2所以可以忽略这个问题。下面只计算第一个人和第二个人最后重合的方案数,另外两种情况类似。
K = X + 1 K=X+1 K=X+1,发现方案数是 [ x K ] ( 1 x + 1 + x ) n m o d    ( x M − 1 ) [x^K](\frac 1x+1+x)^n\mod (x^M-1) [xK](x1+1+x)nmod(xM1),考虑根号分治,当 M ≤ n M\leq\sqrt n Mn 时,由库墨尔定理 ( 2 k i ) ≡ 0 ( m o d    2 ) ( 0 < i < 2 k ) \binom{2^k}i\equiv 0(\mod 2)(0<i<2^k) (i2k)0(mod2)(0<i<2k),那么 ( 1 x 2 k + 1 + x 2 k ) (\frac 1{x^{2^k}}+1+x^{2^k}) (x2k1+1+x2k) 的系数模2意义下与 ( 1 x + 1 + x ) 2 k (\frac 1x+1+x)^{2^k} (x1+1+x)2k 相同,把 n n n 按二进制拆分,把原式变成 ∏ k ( 1 x 2 k + 1 + x 2 k ) \prod_k(\frac 1{x^{2^k}}+1+x^{2^k}) k(x2k1+1+x2k),直接模 M M M 意义下多项式乘法即可,是 O ( m log ⁡ n ) O(m\log n) O(mlogn)的。
M > n M>\sqrt n M>n 时,先把式子写成 ∑ i [ x K + n + i M ] ( 1 + x + x 2 ) n \sum_i[x^{K+n+iM}](1+x+x^2)^n i[xK+n+iM](1+x+x2)n,考虑 n n n 个多项式相乘,有 A A A 个取的是 1 1 1 这一项,有 B B B 个取的是 x x x 这一项,有 C C C 个取的是 x 2 x^2 x2 这一项,那么有 A + B + C = n , B + 2 C = K + n + i M A+B+C=n,B+2C=K+n+iM A+B+C=n,B+2C=K+n+iM,固定 A , B , C A,B,C A,B,C 的值后方案数是 ( n A ) ( n − A B ) \binom nA\binom{n-A}B (An)(BnA),我们要计算这个式子模2的值,可以卢卡斯定理拆开数位dp,对于每个 i i i O ( log ⁡ n ) O(\log n) O(logn) 的,而满足 0 ≤ K + n + i M ≤ 2 n 0\leq K+n+iM\leq 2n 0K+n+iM2n i i i 只有 O ( n m ) O(\frac nm) O(mn) 个,故这种做法时间复杂度是 O ( n m log ⁡ n ) O(\frac nm\log n) O(mnlogn) 的。两种做法拼起来即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值