CF1204E - Natasha, Sasha and the Prefix Sums 题解
神仙计数题啊。(或者是我计数太烂了?)
首先这个最大前缀和的值很难融入到计数里面,很自然的想到对每个最大前缀和计数然后乘起来相加。
最大前缀和恰好等于某数比较难,套路地按差分思想计算最大前缀和小于等于某数的序列个数。但思考无果(
考虑正难则反,求至少有一个位置的前缀和大于等于该数的序列个数。由于起点从零开始,只要算至少有一个位置的前缀和等于该数的序列个数,即画成折线后穿过 \(y=i\) 的个数。
首先如果 \(n-m\geq i\),那么根据离散版的拉格朗日中值定理或者按照图形直观理解,知道所有序列都满足,答案就是 \(\dbinom{n+m}n\)。否则只需要考虑 \(n-m<i\)。
考虑容斥?考虑仅让第一次到达 \(i\) 的位置做贡献?都思考无果,最好可以做到 FFT 优化的平方对数。下面就是很神仙的一步了!考虑转化,把至少穿过一次 \(y=i\) 的折线这样一个不好数的东西转化成另一个东西。我们发现将这样的折线第一次穿过 \(y=i\) 前面的部分按 \(y=i\) 翻折依然连续,否则不可能连续。那么容易得到 \(2i\to n-m\) 的折线和这样的折线形成双射。而这是好算的!就是 \(\dbinom{n'+m'}{n'}\),其中 \(n',m'\) 解个方程就可以出来。
时间复杂度平方或线性。
P.S. 解方程过程:\(n'-m'=n-m+2i,n'+m'=n+m\),解得 \(n'=n+i,m'=m-i\)。(bzd 是哪个毒瘤管理员连二元一次方程组的解法也要求放在紫题题解里/kel/kel)
珍爱生命,远离抄袭!