2023.7

发布时间 2023-07-04 10:15:49作者: Cry_For_theMoon

1. Fireflies

考虑用 Dilworth 定理变成求最长反链,发现这个其实就是可重集的 sperner 定理:对于大小为 \(N\) 的可重集,其最长反链是 \(\lfloor \frac{|N|}{2} \rfloor\) 元集合的个数。

本题里因为每个维度的坐标至少是 \(1\),所以其实 \(N = \sum_{i=1}^{n}(p_i-1)\),然后令 \(M = \lfloor \frac{N}{2}\rfloor\)

令一个点的点权是 \(\sum_{i=1}^{n} (x_i-1)\),则答案就是权值为 \(M\) 的点的个数。

为了方便,令 \(M:=M+n\),然后令一个点的点权变为 \(\sum_{i=1}^{n} x_i\),还是问权值为 \(M\) 的点的个数。

如果没有上界的限制,那就是插板一个组合数;有了上界考虑容斥,这样就能做到 \(2^npoly(n)\),此时数据范围基本明示就是折半:设左半部分钦定了集合 \(S\) 不合法,右半部分钦定了集合 \(|T|\) 不合法,两部分的 \(p_i\) 和分别是 \(f(S),g(T)\),则组合在一起的答案就是:\((-1)^{|S|+|T|}\dbinom{(M-1)-(f(S)+g(T))}{n-1}\)

这样的话组合数这里和 \(f(S)+g(T)\) 有关了,我们需要把它拆成只和 \(S/T\) 有关的两部分。注意到根据范德蒙德卷积,它就是:\(\sum_{i=0}^{n-1}\dbinom{(M-1)-f(S)}{i}\times \dbinom{-g(T)}{n-1-i}\)

但是注意,当 \((M-1)\le f(S)+g(T)\) 的时候,虽然范德蒙德卷积的转化依旧成立,但是这个组合数本身的值是有问题的,它应该是 \(0\) 但是根据组合数的严格定义它其实非 \(0\),因为插板法在此时失效了。

因此我们枚举 \(S\) 以后,把 \(T\) 按照 \(g(T)\) 排序,然后可以和 \(S\) 组合的 \(T\) 一定是一段前缀,双指针维护前缀和即可。

比较朴素的实现是 \(O(n^22^{\frac{n}{2}}\) 的,实现的精细一点应该是可以 \(O(n2^{\frac{n}{2}})\) 的。