C/C++教程

[数学记录]CF896D Nephren Runs a Cinema

本文主要是介绍[数学记录]CF896D Nephren Runs a Cinema,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

题意:给定 \(n=x+y+z\),求满足以下要求的长度为 \(n\) 的序列的数目:序列由 \(x\) 个 \(1\),\(y\) 个 \(-1\),\(z\) 个 \(0\) 组成,序列任意前缀和非负,和在 \([l,r]\) 之间。

考虑确定 \(z\) 和序列和的方案数。

看做卡特兰数类似折线图考虑。则在不能过线的前提下要到 \((x+1,y-x)\)。

过线等价于经过 \(y=x-1\)。将经过后的路径翻折后经过 \((x+y+1,x-1)\)。方案数是 \(C_{x+y}^{x}-C_{x+y}^{x-1}\)。

\[l \leq y-x \leq r \\ x+y = n-z \\ \Rightarrow x \in \left [\frac{n-z-r}{2},\frac{n-z-l}{2} \right ] \\ \begin{aligned} S & = \sum \limits_{z=0}^{n-r} C_{n}^{z} \cdot \sum_{x=\lceil \frac{n-z-r}{2} \rceil} ^ {\lfloor \frac{n-z-l}{2} \rfloor} (C_{n-z}^{x}-C_{n-z}^{x-1}) \\ & = \sum \limits_{z=0}^{n-r} C_{n}^{z} \cdot (C_{n-z}^{\lfloor \frac{n-z-l}{2} \rfloor }-C_{n-z}^{\lceil \frac{n-z-r}{2} \rceil - 1}) \end{aligned} \]

\(\square\)

这里不保证 \(p\) 是质数。分离与膜数互质与不互质的地方并重载即可。

代码慢慢写,应该也不难写。

这篇关于[数学记录]CF896D Nephren Runs a Cinema的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!