浅谈一类使用特征变化刻画复杂变化的方法

有时候我们会遇到一些提供复杂的操作的题目,这类题目的一个想法是寻找变化中更可控更有规律的特征变化。具体来说,使用特征信息去刻画原本的信息,使得复杂的操作对应到特征信息的变化是有规律的,有性质的。

为了寻找到合适的特征值,一个值得尝试的办法是考虑原操作在简化情况下的影响,在简化情况下构造特征变化,然后尝试推广到普遍情况。

然后我们看一些例题来感受一下这个方法:

  • [ARC189B] Minimize Sum

  • [AGC052B] Tree Edges XOR(本题详细解析可以见我的博客

  • 自编题:给定数列 \(a_1, a_2, ......, a_n\) 和正整数 \(k\),你可以进行若干次操作,每次操作选定一个数 \(i\),然后对于所有 \(j\geq i, a_j\leftarrow ((a_j+\binom{j-i+k}{k})\mod 998244353)\)。求进行任意多次操作后 \(\sum_{i=1}^na_i\) 的最小值以及为了使它取到最小值,最少需要多少次操作。\(n\leq 10^5, 1\leq a_i, k<998244352\)。时间限制 \(2s\)

自编题解法:组合数操作非常难,虽然题目规定 \(k\geq 1\),但是仍然可以考虑 \(k=0\) 的情况,发现此时效果相当于一次后缀加操作,那么一个合理的设计特征值的方法是考虑这个数列的差分数组,一次后缀加操作相当于让差分数组中某一项加一。因此 \(k=0\) 的情况的讨论给予我们两个启发:

  • 答案很有可能就是 \(0\)
  • 考虑将差分数组作为特征值。
    考虑 \(k>0\),此时使用一阶差分就不再奏效,但是可以推广到求原数组的 \(k+1\) 阶差分数组 \(d\)。原操作等价于将 \(d\) 中的某一个数加一,而为了让 \(\sum_{i=1}^na_i\) 最小,只需要让 \(d\) 数组都是 \(0\) 即可。因此可以对每一个 \(d_i\),都对它执行 \(998244353-d_i\) 次操作。

为了求 \(k+1\) 阶差分数组,只需写一个 NTT,模数刚好是 \(998244353\)

posted @ 2025-06-24 07:55  yanzihe  阅读(11)  评论(0)    收藏  举报