容斥原理
AGC058D – Yet Another ABC String
将 换成 。记 是题面中 的数量,。我们称位置 不合法,当且仅当 。将其视为两条边 ,那么所有不合法的位置造成的连边将会形成若干条链。
考虑容斥。直接钦定指定数量的位置不合法,其方案是难以计算的。又因为容斥系数是 , 为钦定的非法位置数量,那么将整个串分成若干个部分分别计算方案,带上容斥系数相乘后累加,结果不变。故而尝试从上文的链入手:易得对于固定长度的一条链,能够连成它的非法位置集合不变。设 表示“大小为偶数,且能够连成长度恰为 的链”的非法位置集合数量; 则是大小为奇数。染色方案与位置集合方案是独立的;则设整个串按顺序被分成了链 (此处的“链”长度均不小于 ),答案即为 (更多…)
被这玩意卡了一上午——前天CSP-S模拟的T4需要用到这类问题的转移。为什么题解TMD是错的?
即表示“每个位置有类元素可选,且序列中必须包含指定的类元素的,长度为的序列的个数”。形式化地讲,我们需要统计满足以下条件的序列的个数:。
通过容斥原理,我们可以计算出至少有个中的元素没有被包含在序列中的序列的个数,然后乘上容斥系数累加既是答案。也即:
。通俗地讲,我们在 个元素中选择 个,并强制使得它们不出现在序列中,其余元素任选。除去组合数的预处理时间,复杂度为。参阅AtCoder ABC 194 F – Digits Paradise in Hexadecimal,可以使用上述计算而非DP求解(虽然DP更加简洁直观)。
More