OICamp 2016 Day2 路径数

本文介绍了一种高效计算q-Binomial系数的方法,利用数学性质将问题转化为求F[n],并通过预处理和递归策略实现了O(p+Tlogp)的时间复杂度。

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

题目大意

给定 n,m,q,p ,令
c[i][j]=(qj×c[i1][j]+c[i][j1])modp
假如 i=0 j=0 c[i][j]=1
求出 c[n][m]

数据范围

n,m,q109
p2105
(q,p)=1 q,p 均为质数。
T n,m,满足 T105

题解

首先这东西叫q-Binomial Coefficient,查阅相关资料后可以知道,

c[n][m]F(n)=F(n+m)F(m)×F(n)=i=1n(qi1)

那么现在的问题基本可以变成,给定 n ,求F[n]
a 为最小的k,使得 qkmodp=1 ,接下来我们可以进行一些化简:
F(n)=i=1n(qi1)=a|in(qi1)×ain(qi1)=i=1na(qia1)×(i=1a1qi1)na×i=0nmodaqi1

对于后两项可以直接预处理,现在的问题是怎么求第一项:
i=1n(qia1)=i=1n(qa1)×j=0i1qja=(qa1)ni=1nj=0i1qja

这里需要注意,在实际求的时候,我们需要另外记一个变量x表示最终要乘上(q^a-1)^x,不能直接乘上去,因为会变成0而导致最终没有逆元,但实际上可能分数上下消掉。
接下来的问题变成求第二项:
i=1nj=0i1qja=pini×i=1npj=0ip1pja=pini×i=0p1qianp×i=1npj=0i1qja

这里对第二项的处理方法和 (qa1)x 相同,就是另外记一个变量 y 表示最后要乘上(p1i=0qia)y,第一项就和一开始的处理方法相同,预处理一些东西就好了,第三项是类似的子问题,递归求解。

于是这题就以 O(p+Tlogp) 的复杂度解决了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值