您的位置:首页 > 其它

陶陶的难题

2016-03-12 20:01 260 查看

题意

给定A,B,C,L,RA,B,C,L,R,求(∑i=LRi∗⌊A∗i+CB⌋)mod(109+7)(\sum\limits_{i=L}^Ri *\lfloor \frac{A*i + C}{B}\rfloor) \bmod (10^9+7)。

A,B,C,L,R≤109A,B,C,L,R\le 10^9

分析

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

我们先考虑一个简单的题目:求∑i=0N⌊A∗i+CB⌋\sum\limits_{i=0}^N\lfloor \frac{A*i + C}{B}\rfloor。我们令F(N,A,B,C)=∑i=0N⌊A∗i+CB⌋F(N,A,B,C)=\sum\limits_{i=0}^N\lfloor \frac{A*i + C}{B}\rfloor。我们现在要求解FF这个函数。

分情况讨论:

1°,A≥B1°,A\ge B

F(N,A,B,C)=∑i=0N⌊A∗i+CB⌋=∑i=0N⌊(⌊AB⌋∗B+AmodB)∗i+CB⌋=∑i=0Ni∗⌊AB⌋+∑i=0N⌊AmodB∗i+CB⌋=∑i=0Ni∗⌊AB⌋+F(N,AmodB,B,C)F(N,A,B,C)=\sum\limits_{i=0}^N\lfloor \frac{A*i + C}{B}\rfloor=\sum\limits_{i=0}^N\lfloor \frac{(\lfloor\frac{A}{B}\rfloor*B+A \bmod B)*i + C}{B}\rfloor=\sum\limits_{i=0}^Ni*\lfloor \frac{A}{B}\rfloor+\sum\limits_{i=0}^N\lfloor \frac{A \bmod B *i + C}{B}\rfloor=\sum\limits_{i=0}^Ni*\lfloor \frac{A}{B}\rfloor+F(N,A \bmod B,B,C)

2°,A<B2°,A< B

F(N,A,B,C)=∑i=0N⌊A∗i+CB⌋=∑i=0N∑j=0⌊A∗i+CB⌋−1(j<⌊A∗i+CB⌋)=∑j=0⌊A∗N+CB⌋−1∑i=0N(j<⌊A∗i+CB⌋)F(N,A,B,C)=\sum\limits_{i=0}^N\lfloor \frac{A*i + C}{B}\rfloor=\sum\limits_{i=0}^N\sum\limits_{j = 0}^{\lfloor \frac{A*i + C}{B}\rfloor - 1}(j < \lfloor \frac{A*i + C}{B}\rfloor)=\sum\limits_{j = 0}^{\lfloor \frac{A*N + C}{B}\rfloor - 1}\sum\limits_{i=0}^N(j < \lfloor \frac{A*i + C}{B}\rfloor)

我们看看满足括号里的条件的ii的范围。

j<⌊A∗i+CB⌋j <\lfloor\frac{A*i + C}{B}\rfloor

j+1≤A∗i+CBj+1\le \frac{A*i+C}{B}

B∗j+B−CA≤i\frac{B* j + B - C}{A}\le i

⌊B∗j+B−C−1A⌋<i\lfloor\frac{B * j + B - C - 1} {A}\rfloor

我们就得到了ii
的范围

设zj=⌊B∗j+B−C−1A⌋,Max=⌊A∗N+CB⌋−1z_j = \lfloor\frac{B * j + B - C - 1} {A}\rfloor,Max =\lfloor \frac{A*N + C}{B}\rfloor - 1

F(N,A,B,C)=∑j=0Max(N−zj)=N∗(Max+1)−∑j=0Max⌊B∗j+B−C−1A⌋=∑j=0Max(N−zj)=N∗(Max+1)−F(Max,B,A,B−C−1)F(N,A,B,C)=\sum\limits_{j = 0}^{Max}(N - z_j)=N * (Max+1)-\sum\limits_{j=0}^{Max}\lfloor\frac{B * j + B - C - 1} {A}\rfloor=\sum\limits_{j = 0}^{Max}(N - z_j)=N * (Max+1)-F(Max,B,A,B-C-1)递归计算即可。我们发现,每次分子分母交换位置,都会做一次取模运算,类似欧几里得算法,故它的复杂度为logNlogN。

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

我们回到原题。

令G(N,A,B,C)=∑i=0Ni∗⌊A∗i+CB⌋G(N,A,B,C)=\sum\limits_{i=0}^Ni *\lfloor \frac{A*i + C}{B}\rfloor。类似上面的推理,若A≥BA\ge B,我们可以先取模计算,在此不再赘述如何推。现在我们假设A<BA。

∑i=0Ni∗⌊A∗i+CB⌋=∑i=0Ni∑j=0⌊A∗i+CB⌋−11=∑j=0Max∑i=zj+1Ni\sum\limits_{i=0}^Ni *\lfloor \frac{A*i + C}{B}\rfloor=\sum\limits_{i=0}^Ni \sum\limits_{j=0}^{\lfloor \frac{A*i + C}{B}\rfloor - 1}1=\sum\limits_{j = 0}^{Max}\sum\limits_{i=z_j+1}^Ni其中,Max,zjMax,z_j与之前定义一样。

由等差数列求和公式,我们进一步得到G(N,A,B,C)=12∑j=0Max(N−zj)∗(N+zj+1)=12∑j=0Max(N2+N)−12∑j=0Maxz2j−12∑j=0MaxzjG(N,A,B,C)=\frac{1}{2}\sum\limits_{j = 0}^{Max}(N - z_j) * (N + z_j + 1) =\frac{1}{2}\sum\limits_{j = 0}^{Max}(N ^ 2 + N) - \frac{1}{2}\sum\limits_{j = 0}^{Max}z_j^2 - \frac{1}{2}\sum\limits_{j = 0}^{Max}z_j

现在我们要知道如何求∑j=0Maxz2j\sum\limits_{j = 0}^{Max}z_j^2。

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

设T(N,A,B,C)=∑i=0N⌊A∗i+CB⌋2T(N,A,B,C) = \sum\limits_{i = 0}^{N}\lfloor\frac{A*i+C}{B}\rfloor^2。

同样的,我们只考虑A<BA的情况(A≥BA\ge B的情况同样能简单推出式子转化成A<BA的情况)。

令t=⌊A∗i+CB⌋t=\lfloor\frac{A*i+C}{B}\rfloor。我们可以尝试构造一个关于tt的等差数列求和式子推到TT。

令S=∑i=0N∑j=0t−1j=12∑i=0N(t−1)∗t=12∑i=0Nt2−12∑i=0NtS=\sum\limits_{i = 0}^N\sum\limits_{j=0}^{t-1}j = \frac{1}{2}\sum\limits_{i = 0}^N(t-1)*t=\frac{1}{2}\sum\limits_{i = 0}^Nt^2-\frac{1}{2}\sum\limits_{i = 0}^Nt

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

然后我们把SS变下形,S=∑j=0Maxj∗(N−zj)=N∗∑j=0Maxj−∑j=0Maxj∗zjS=\sum\limits_{j=0}^{Max}j*(N-z_j)=N *\sum\limits_{j=0}^{Max}j-\sum\limits_{j=0}^{Max}j*z_j,Max,zjMax,z_j同样是跟以前的定义一样的。我们惊奇地发现,后面那一项不就是一个新的原问题类型的问题吗?我们就能递归处理了!

总结

综上所述,当A<BA时

G(N,A,B,C)=12∗(Max+1)∗(N2+N)−12∗T(Max,B,A,B−C−1)−12∗F(Max,B,A,B−C−1)G(N,A,B,C)=\frac{1}{2}*(Max+1)*(N ^ 2 + N) - \frac{1}{2}*T(Max,B,A,B-C-1) - \frac{1}{2}*F(Max,B,A,B-C-1)

F(N,A,B,C)=N∗(Max+1)−F(Max,B,A,B−C−1)F(N,A,B,C)=N * (Max+1)-F(Max,B,A,B-C-1)

T(N,A,B,C)=N∗(Max+1)∗Max−2∗G(Max,B,A,B−C−1)+F(N,A,B,C)T(N,A,B,C)=N *(Max+1) * Max-2*G(Max,B,A,B-C-1)+F(N,A,B,C)

其中,Max=⌊A∗N+CB⌋−1Max=\lfloor \frac{A*N + C}{B}\rfloor - 1

因为每一层(N,A,B,CN,A,B,C一定)要求F、G、TF、G、T时用到的Max,zjMax,z_j是一样的,我们就可以同时递归处理F、G、TF、G、T值,这样总的时间复杂度是logNlogN的,就能很好地通过本题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: