loj「LibreOJ NOI Round #2」不等关系

题意

略。

题解

我们暂且先忽略掉所有<
考虑将>看做一个限制“1”,要求的就是111...111
那么,容斥一下,就是:
111...111
= 111...11? - 111...110
= 111...11? - 111...1?0 + 111...100
= ...
= 111...11? - 111...1?0 + 111...?00 - ...
考虑类似111?000这种怎么求?
\(dp_i\)表示考虑前\(i\)>之前的所有符号(包括<),满足的序列的种类数。


转移方程:

\[dp_i = [s_i = '>'] \sum_{j < i} [s_j = '>'] {(-1)} ^ {cnt_i - cnt_j - 1} * \binom{i}{i - j} * dp_j \]

其中\(cnt_i\)代表的是第\(i\)位置之前有多少个>,组合数代表取出\(i\)个数的\(i - j\)个放在问号后面的位置上,由于问号前后序列都是单调的,但是对两个序列交界处没有要求,所以方案数就是一个组合数。
把式子变形一下,就是

\[\frac{dp_i}{i!} = [s_i = '>'] \sum_{j < i} [s_j = '>'] \frac{dp_j}{j!} * {(-1)} ^ {cnt_i - cnt_j - 1} * \frac{1}{(i - j)!} \]

做分治ntt即可。
代码he的,不好意思贴了。

posted @ 2019-09-16 20:19  psimonw  阅读(1803)  评论(0编辑  收藏  举报