+++ date = "2021-07-26T21:22:00+08:00" draft = false tags = [] title = "2021 牛客多校第 4 场" authors = ["xry111"] +++ # I. Inverse Pair ## 题意 输入一个数组,保证里面是一个排列,选择一些数组元素给他加 $1$, 最小化操作后的逆序对数。 ## 做法 因为是一个排列,而且只能加 $1$,增加某个数组元素时, 一定不会与它后面的元素形成新的逆序对, 只考虑与它前面元素比较时会减少逆序对就行了。 如果 $a\_j = a\_i + 1$ 且 $j < i$,那么我们给 $a\_i$ 加 $1$ 就能减少一对逆序对,但是如果同时也给 $a\_j$ 加 $1$ 就减小不了。 随便画一下会发现所有数可以连成一个二分图, 可以将每个联通分量中 (除了没连边的) 所有黑点或者白点加 $1$, 即可减少相应数目的逆序对。求一下原来的逆序对数然后搞一下就行了。 # G. Product ## 题意 给定 $n, k, D$,求 $$\\sum_{a\_1 + a\_2 + \\cdots a\_n = D, a\_i \geq 0} \\frac{D!}{\\prod (a\_i + k)!}$$ ## 做法 这个式子就是 $$\\sum\_{a\_1 + a\_2 + \\cdots a\_n = D} \\frac{D!}{\\prod a\_i !} = \\sum\_{\\{a\_i\\}} \\binom{D}{a\_1, \cdots, a\_n}$$ 改了一下,而这个改之前的式子众所周知就是 $n^D$。 我们考虑怎么才能凑成这种样子。令 $b\_i = a\_i + k$,就成了 $$\\frac{D!}{(D+nk)!} \\sum_{b\_1 + \\cdots b\_n = D + nk, b\_i \geq k} \\binom{D+nk}{b\_1, \cdots, b\_n}$$ 前面那个东西可以最后再算, 后面和式如果没有那个讨厌的 $b\_i \geq k$ 就是 $n^{D+nk}$, 但是有这个条件以后就得把不满足它的容斥掉。 设有 $m$ 个不满足条件的 $b\_i$,它们的和是 $\\Delta$,对应的容斥项是 $$(-1)^m \\binom{n}{m} \\sum_{b\_1 + \cdots + b\_{n - m} = D + nk - \\Delta, \\Delta = \\sum\_{j=1}^m c\_j} \\binom{D + nk}{b\_1, \cdots, b\_{n - m}, c\_1, \cdots, c\_m}$$ 把 $b$ 和 $c$ 先分开,变成 $$\\sum\_\\Delta \\binom{D + nk}{\\Delta} \\sum_{c\_i < k} \\binom{\Delta}{c\_1, \cdots, c\_m} \\sum_{\\{b\_i\\}} \\binom{D + nk - \\Delta}{b\_1, \cdots, b\_{n - m}}$$ 其中第一项就是个二项式系数 (但是由于出题人故意毒瘤人,不能预处理阶乘, 需要一边求和一边递推);第三项就是 $(n - m)^{D + nk - \\Delta}$; 至于第二项就是将 $\\Delta$ 拆分成小于 $k$ 的 $m$ 个未必递增的非负整数之和的方案数 $f(m, \\Delta)$,这个东西可以递推: $$f(i, j) = \\sum_{x < k} \\binom{j}{x} f(i - 1, j - x)$$ 然后就完了,答案是 $$\\frac{D!}{(D+nk)!} \\sum_{m=0}^{n - 1} (-1)^m \\binom{n}{m} \\sum\_\\Delta \\binom{D + nk}{\\Delta} f(m, \\Delta) (n - m)^{D + nk - \\Delta}$$ 全场签完到就自闭这题,最后一分钟才过,剩下啥都没干。教训: * 推公式不能凭感觉,要用比较严格的数学符号,不然能写出差了 $114514$ 项的公式。 * 公式不对千万不要拿着暴力结果去猜,不然能猜出 $1919810$ 个错误公式。