陶陶的难题

题意

给定 A,B,C,L,R ,求 (i=LRiAi+CB)mod(109+7)
A,B,C,L,R109

分析

F(N,A,B,C)的引入

我们先考虑一个简单的题目:求 i=0NAi+CB 。我们令 F(N,A,B,C)=i=0NAi+CB 。我们现在要求解 F 这个函数。

分情况讨论:
1°AB
F(N,A,B,C)=i=0NAi+CB=i=0NABB+AmodB)i+CB=i=0NiAB+i=0NAmodBi+CB=i=0NiAB+F(N,AmodB,B,C)

2°A<B
F(N,A,B,C)=i=0NAi+CB=i=0Nj=0Ai+CB1(j<Ai+CB)=j=0AN+CB1i=0N(j<Ai+CB)
我们看看满足括号里的条件的 i 的范围。

j<Ai+CB
j+1Ai+CB
Bj+BCAi
Bj+BC1A<i

我们就得到了 i 的范围

zj=Bj+BC1A,Max=AN+CB1

F(N,A,B,C)=j=0Max(Nzj)=N(Max+1)j=0MaxBj+BC1A=j=0Max(Nzj)=N(Max+1)F(Max,B,A,BC1) 递归计算即可。我们发现,每次分子分母交换位置,都会做一次取模运算,类似欧几里得算法,故它的复杂度为 logN

G(N,A,B,C)的引入
我们回到原题。
G(N,A,B,C)=i=0NiAi+CB 。类似上面的推理,若 AB ,我们可以先取模计算,在此不再赘述如何推。现在我们假设 A<B
i=0NiAi+CB=i=0Nij=0Ai+CB11=j=0Maxi=zj+1Ni 其中, Max,zj 与之前定义一样。
由等差数列求和公式,我们进一步得到 G(N,A,B,C)=12j=0Max(Nzj)(N+zj+1)=12j=0Max(N2+N)12j=0Maxz2j12j=0Maxzj
现在我们要知道如何求 j=0Maxz2j

T(N,A,B,C)的引入
T(N,A,B,C)=i=0NAi+CB2
同样的,我们只考虑 A<B 的情况( AB 的情况同样能简单推出式子转化成 A<B 的情况)。
t=Ai+CB 。我们可以尝试构造一个关于 t 的等差数列求和式子推到T
S=i=0Nj=0t1j=12i=0N(t1)t=12i=0Nt212i=0Nt

那么有 2S=T(N,A,B,C)F(N,A,B,C) ,即 T(N,A,B,C)=2S+F(N,A,B,C)

然后我们把 S 变下形,S=j=0Maxj(Nzj)=Nj=0Maxjj=0Maxjzj Max,zj 同样是跟以前的定义一样的。我们惊奇地发现,后面那一项不就是一个新的原问题类型的问题吗?我们就能递归处理了!

总结
综上所述,当 A<B
G(N,A,B,C)=12(Max+1)(N2+N)12T(Max,B,A,BC1)12F(Max,B,A,BC1)

F(N,A,B,C)=N(Max+1)F(Max,B,A,BC1)

T(N,A,B,C)=N(Max+1)Max2G(Max,B,A,BC1)+F(N,A,B,C)

其中, Max=AN+CB1

因为每一层( N,A,B,C 一定)要求 FGT 时用到的 Max,zj 是一样的,我们就可以同时递归处理 FGT 值,这样总的时间复杂度是 logN 的,就能很好地通过本题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值