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的,不好意思贴了。