The solution of P5339

发布时间 2023-11-09 09:43:41作者: feather_life

problem


容斥好题,结果题解里面一堆 \(\text{NTT}\)

如果我们去掉有多少个人喜欢什么东西的条件,那么这个题就直接枚举有 \(i\) 组同学会一起讨论蔡徐坤。这一个问题十分容易。

使用容斥原理来做,然后容斥的系数是 \((-1)^i\) 想必这个东西对于大家来说是十分简单的。

如果我们加上这些条件,我们还是可以这样想。当有 \(i\) 组人讨论时,那么就有 \(n - 4 \times i\) 个人没在讨论。然后枚举排列即可。

所以式子就是:

\[\sum^{n - 4 \times i}_{a = 0} (^{n - 4 \times i}_{\ \ \ \ \ a}) \sum^{n - 4 \times i - a}_{b = 0} (^{n - 4 \times i - a}_{\ \ \ \ \ \ \ \ b}) \sum^{n - 4 \times i - a - b}_{c = 0} (^{n - 4 \times i - a - b}_{\ \ \ \ \ \ \ \ \ \ c}) \]

意思就是选唱,跳,rap,篮球分别有几个人,然后分配位置。

然后我们发现这个式子不优化的复杂度为 \(O(n^3)\),用前缀和优化之后依然是 \(O(n^2)\) 的。由于我们还要枚举一层 \(i\),所以时间复杂度就是 \(O(n^3)\)。肯定会 \(\text{TLE}\) 所以我们需要优化。

我们可以想如果我们可以把 \(n\) 个人先分成两组,一组是唱和跳,另一组是rap和篮球。这样分后我们就可以用组合数算出求出答案了。

所以我们可以把式子改成这样:

\[\sum^{n - 4 \times i}_{j = 0} (^{n - 4 \times i}_{\ \ \ \ \ j}) (\sum^{j - (b - i)}_{k = a - i} (^j_k) \times \sum^{n - 4 \times i - j - (c - i)}_{l = d - i} (^{n - 4 \times i - j}_{\ \ \ \ \ \ \ \ l})) \]

所以上面的式子直接求就可以做到 \(O(n^2)\) 的复杂度,然后再利用前缀和优化一下就可以变成 \(O(n)\)

由于需要在枚举一层 \(i\) 所以最终的复杂度为 \(O(n^2)\)


code