【LOJ3071】「2019 集训队互测 Day 2」神树大人挥动魔杖

这篇博客详细解析了LOJ3071题目的思路和解决方案,涉及递推公式、容斥原理以及线性递推数列的计算。通过建立数学模型,将问题转化为多项式乘法和带余除法,最终实现了O(MLog^2M + MLogMLogN)的时间复杂度解法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【题目链接】

【思路要点】

  • w a y s i ways_i waysi 表示从 1 1 1 号点走到 i i i 号点的方案数,有 w a y s i = p × w a y s i − 1 + q × w a y s i − 2   ( i ≥ 2 ) ways_{i}=p\times ways_{i-1}+q\times ways_{i-2}\ (i\geq2) waysi=p×waysi1+q×waysi2 (i2)
  • 考虑容斥原理,我们强制一部分格子没有被踩过,计算在剩余格子中行走的方案数,乘上容斥系数计入答案。
  • f i f_i fi 表示从 1 1 1 走到 i i i ,强制 i − 1 i-1 i1 未被踩过,带有容斥系数的方案数, g i g_i gi 表示 N = i N=i N=i 时的答案,则有
    f i = − ∑ j = 0 i − 2 ( q × w a y s j + 1 ) M f i − j − 2 f_{i}=-\sum_{j=0}^{i-2}(q\times ways_{j+1})^Mf_{i-j-2} fi=j=0i2(q×waysj+1)Mfij2
    g i = ∑ j = 0 i ( w a y s j + 1 + q × w a y s j ) M f i − j g_{i}=\sum_{j=0}^{i}(ways_{j+1}+q\times ways_j)^Mf_{i-j} gi=j=0i(waysj+1+q×waysj)Mfij
  • W a y s ( x ) = ∑ i ≥ 0 w a y s i x i Ways(x)=\sum_{i\geq0}ways_ix^i Ways(x)=i0waysixi ,则有 W a y s ( x ) = p x W a y s ( x ) + q x 2 W a y s ( x ) + x Ways(x)=pxWays(x)+qx^2Ways(x)+x Ways(x)=pxWays(x)+qx2Ways(x)+x ,即 W a y s ( x ) = x 1 − p x − q x 2 Ways(x)=\frac{x}{1-px-qx^2} Ways(x)=1pxqx2x
  • W a y s ( x ) = x 1 − p x − q x 2 = A ( x ) 1 − α x + B ( x ) 1 − β x Ways(x)=\frac{x}{1-px-qx^2}=\frac{A(x)}{1-\alpha x}+\frac{B(x)}{1-\beta x} Ways(x)=1pxqx2x=1αxA(x)+1βxB(x) ,解得
    α = p + p 2 + 4 q 2 , β = p − p 2 + 4 q 2 , A ( x ) = 1 p 2 + 4 q , B ( x ) = − 1 p 2 + 4 q \alpha=\frac{p+\sqrt{p^2+4q}}{2},\beta=\frac{p-\sqrt{p^2+4q}}{2},A(x)=\frac{1}{\sqrt{p^2+4q}},B(x)=-\frac{1}{\sqrt{p^2+4q}} α=2p+p2+4q ,β=2pp2+4q ,A(x)=p2+4q 1,B(x)=p2+4q
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值