CF1859F Fancy Arrays

发布时间 2023-12-16 08:22:24作者: FOX_konata

Fancy Arrays - 洛谷

  • 我们先找这题看起来有点奇怪的部分:

    • \(x\leq 40\)

    • \(|a_i-a_{i-1}|\leq k\)

  • 我们先考虑第二个条件怎么用。我们发现 \(\min a_i \in [0,x+k)\),而原数组相邻两数之差的条件肯定要考虑成差分来处理

  • 可以发现,一个差分数组和 \(\min a_i\) 与一个 \(a_i\) 序列唯一对应。因为我们可以把差分求前缀和,然后找到里面的最小值,再整体加偏移量的方式得到 \(a_i\)

  • 对于 \(\min a_i \in [x,x+k)\) 的情况自然不需要考虑,因为他们构造出来的一定都满足条件。而对于 \(\min a_i \in [0,x)\) 的情况,不满足条件当且仅当 \(\max a_i \in [0,x)\),我们可以考虑容斥。

  • 总方案:\((2k+1)^{n-1} \times (x+k)\);现在我们即要求满足 \(a_i \in [0,x)\)\(a_i\) 的方案数。我们可以 \(dp\) 来处理这个问题

  • \(dp_{i,j}\) 表示前 \(i\) 个数已经填好,第 \(i\) 个数填 \(j\) 的方案数。转移是 \(O(nk^2)\) 的,前缀和可以优化掉一个 \(k\)

  • 发现 \(x \leq 40\),于是矩阵快速幂优化 \(dp\)

  • 最终复杂度 \(O(Tx^3\log n)\)