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\)>之前的所有符号(包括<),满足的序列的种类数。

o__575.png
转移方程:
\[ 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的,不好意思贴了。

转载于:https://www.cnblogs.com/psimonw/p/11529530.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值