Gravatar
op_组撒头屯
积分:3036
提交:338 / 677

Pro2293  [HZOI 2015]EX_香蕉

在与牢大战斗两个多月后,“引爆逆天力量,追寻圆环之理的神藏奥秘”系列堂堂打赢复活赛。看来扣1真的有用!

直接做明显没前途,考虑容斥。

注意到位置 $i$ 不合法当且仅当 $a_i<a_{i-1}$ 且 $a_i|a_{i-1}$,即 $a_i$ 为 $a_{i-1}$ 的非自身因数。

考虑有一些非法位置,其他位置随便放,然后钦定非法位置的数为上一位的非自身因数。

然而注意到非法位置的方案数是不好算的,因为可能出现多个非法位置连着的情况,此时各个非法位置是不独立的。

幸运的是,由于 $a_i\le a_{i-1}/2$,每个非法位置连续段的长度不会超过 $\log m$,那我们就可以直接枚举连续段的长度进行DP。

记 $f_i$ 表示 $i$ 作为连续段结尾的容斥贡献,$s_i$ 表示前 $i$ 位的容斥贡献和,那么有

$$f_i=\sum_{j=1}^{\log m} g_j s_{i-j-1} (-1)^j$$

$$s_i=f_i+ s_{i-1}m$$

其中 $g_i$ 表示连续 $i$ 个非法位置,且前一个合法位置随便放的方案数,容易 $O(m\log m)$ 预处理。

显然DP可以矩阵优化,于是做到了 $O(\log^3 m \log n)$ 的复杂度。可能爆标了?

Bonus: 注意到DP是一个线性递推,使用 BM 算法可以做到 $O(\log m \log n \log\log m)$。



2024-02-27 21:15:06    
我有话要说
Gravatar
yrtiop
积分:2101
提交:309 / 808
1111111oooopppppqqqqqqqqqqqqqqqq

2024-02-27 22:42:43    
Gravatar
Lixj
积分:237
提交:88 / 241


2024-05-13 20:37:59    
Gravatar
Lixj
积分:237
提交:88 / 241


2024-05-13 20:40:39    
Gravatar
Lixj
积分:237
提交:88 / 241


2024-05-13 20:40:56