题意
略。
题解
我们暂且先忽略掉所有<
。
考虑将>
看做一个限制“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} * inom{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的,不好意思贴了。