学习背景
之前做了一道类欧+(Stern-Brocot Tree)二分的题目,就学一下。
问题模型
求
[egin{aligned}
f(n,a,b,c) &= sum_{i=0}^{n} leftlfloor frac{ai+b}{c}
ight
floor \
g(n,a,b,c) &= sum_{i=0}^{n} i leftlfloor frac{ai+b}{c}
ight
floor \
h(n,a,b,c) &= sum_{i=0}^{n} left(leftlfloor frac{ai+b}{c}
ight
floor
ight)^2
end{aligned}
]
解法推导
为了方便,我们设(m= leftlfloor frac{na+b}{c}
ight
floor)
注意,因为取模符号太宽了,所以用C++的"%"来表示取模。
(一)(f(n,a,b,c))
- 第一种情况:(a<c)且(b<c)
这个可以直接推导,比较简单。
[egin{aligned}
f(n,a,b,c) &= sum_{i=0}^{n} leftlfloor frac{ai+b}{c}
ight
floor \
&= sum_{i=0}^{n} sum_{j=0}^{n}
left[j < leftlfloor frac{ai+b}{c}
ight
floor
ight] \
&= sum_{j=0}^{m-1} sum_{i=0}^{n}
left[j < leftlfloor frac{ai+b}{c}
ight
floor
ight] \
&= sum_{j=0}^{m-1} sum_{i=0}^{n}
left[j < leftlceil frac{ai+b-c+1}{c}
ight
ceil
ight] \
&= sum_{j=0}^{m-1} sum_{i=0}^{n}
left[j < frac{ai+b-c+1}{c}
ight] \
&= sum_{j=0}^{m-1} sum_{i=0}^{n}
left [cj < ai+b-c+1
ight] \
&= sum_{j=0}^{m-1} sum_{i=0}^{n}
left[ i> frac{cj+c-b-1}{a}
ight] \
&= sum_{j=0}^{m-1} n - leftlfloor frac{cj+c-b-1}{a}
ight
floor \
&= nm - sum_{j=0}^{m-1} leftlfloor frac{cj+c-b-1}{a}
ight
floor \
&= nm - f(m - 1, c, c - b - 1, a)
end{aligned}
]
- 第二种情况:(ageq c)且(bgeq c)
这时候我们只要将(leftlfloor frac{ai+b}{c} ight floor)拆开,就是:
[egin{aligned}
f(n,a,b,c) &= sum_{i=0}^{n} leftlfloor frac{ai+b}{c}
ight
floor \
&= sum_{i=0}^{n}
left(
leftlfloor frac{(a \% c)i+(b \% c)}{c}
ight
floor +
i leftlfloor frac{a}{c}
ight
floor +
leftlfloor frac{b}{c}
ight
floor
ight) \
&= frac{n(n+1)}{2} leftlfloor frac{a}{c}
ight
floor +
n leftlfloor frac{b}{c}
ight
floor +
sum_{i=0}^{n}
leftlfloor frac{(a \% c)i+(b \% c)}{c}
ight
floor
end{aligned}
]
(二)(g(n,a,b,c))
第二类和第一类比较类似,就写得简单一点。
- 第一种情况:(a<c)且(b<c)
[egin{aligned}
g(n,a,b,c) &= sum_{i=0}^{n} i leftlfloor frac{ai+b}{c}
ight
floor \
&= sum_{j=0}^{m-1} sum_{i=0}^{n}
i left[ leftlfloor frac{ai+b}{c}
ight
floor > j
ight] \
&= sum_{j=0}^{m-1} sum_{i=0}^{n}
i left[ i > leftlfloor frac{cj+c-b-1}{a}
ight
floor
ight] \
&= frac{mn(n+1)}{2} -
sum_{j=0}^{m-1}
frac{leftlfloor frac{cj+c-b-1}{a}
ight
floor
(leftlfloor frac{cj+c-b-1}{a}
ight
floor+1)}{2} \
&= frac{mn(n+1)}{2} -
frac{1}{2} sum_{j=0}^{m-1}
left( leftlfloor frac{cj+c-b-1}{a}
ight
floor
ight)^2 -
frac{1}{2} sum_{j=0}^{m-1}
leftlfloor frac{cj+c-b-1}{a}
ight
floor \
&= frac{mn(n+1)}{2} - frac{1}{2}h(n,c,c-b-1,a) - frac{1}{2}f(n,c,c-b-1,a)
end{aligned}
]
- 第二种情况:(ageq c)且(bgeq c)
这个也和(f(n,a,b,c))类似,直接给出结论了:
[ g(n,a,b,c) = frac{n(n+1)(2n+1)}{6}leftlfloor frac{a}{c}
ight
floor +
frac{n(n+1)}{2}leftlfloor frac{b}{c}
ight
floor +
g(n,a \% c, b \% c, c)
]
(三)(h(n,a,b,c))
因为这里涉及到了平方,所以我们考虑用一种求和式表示平方。
[ n^2 = 2sum_{i=0}^{n} i - n
]
之后,有如下推导:
- 第一种情况:(a<c)且(b<c)
[ h(n,a,b,c) = sum_{i=0}^{n} left( 2sum_{j=0}^{left lfloorfrac{ai+b}{c}
ight
floor}j - leftlfloorfrac{ai+b}{c}
ight
floor
ight)
]
之后,就用与求(f)和(g)类似的方法,得到:
[ h(n,a,b,c) = nm(m+1) - 2g(m-1,c,c-b-1,a) - 2f(m-1,c,c-b-1,a) - f(n,a,b,c)
]
- 第二种情况:(ageq c)且(bgeq c)
对于这个,就直接将三项式暴力拆开,就有:
[egin{aligned}
h(n,a,b,c) = leftlfloor frac{a}{c}
ight
floor^2 imes frac{n(n+1)(2n+1)}{6} +
leftlfloor frac{b}{c}
ight
floor^2 imes (n+1) +
leftlfloor frac{a}{c}
ight
floor imes leftlfloor frac{b}{c}
ight
floor imes n(n+1) +
h(n,a \% c, b \% c, c) +
2leftlfloor frac{a}{c}
ight
floor g(n,a \% c, b \% c, c) +
2leftlfloor frac{b}{c}
ight
floor f(n,a \% c, b \% c, c)
end{aligned}
]
(四)整理一下
[f(n,a,b,c) =
egin{cases}
frac{n(n+1)}{2} leftlfloor frac{a}{c}
ight
floor + n leftlfloor frac{b}{c}
ight
floor + f(m-1, a \% c, b \% c, c) & a < c And b < c \
nm - f(m - 1, c, c - b - 1, a) & otherwise
end{cases}
]
[g(n,a,b,c) =
egin{cases}
frac{mn(n+1)}{2} - frac{1}{2}h(n,c,c-b-1,a) - frac{1}{2}f(n,c,c-b-1,a) & a < c And b < c \
frac{n(n+1)(2n+1)}{6}leftlfloor frac{a}{c}
ight
floor +
frac{n(n+1)}{2}leftlfloor frac{b}{c}
ight
floor +
g(n,a \% c, b \% c, c) & otherwise
end{cases}
]
[h(n,a,b,c) =
egin{cases}
h(n,a,b,c) = nm(m+1) - 2g(m-1,c,c-b-1,a) - 2f(m-1,c,c-b-1,a) - f(n,a,b,c)
& a < c And b < c \
leftlfloor frac{a}{c}
ight
floor^2 imes frac{n(n+1)(2n+1)}{6} +
leftlfloor frac{b}{c}
ight
floor^2 imes (n+1) +
leftlfloor frac{a}{c}
ight
floor imes leftlfloor frac{b}{c}
ight
floor imes n(n+1) +
h(n,a \% c, b \% c, c) +
2leftlfloor frac{a}{c}
ight
floor g(n,a \% c, b \% c, c) +
2leftlfloor frac{b}{c}
ight
floor f(n,a \% c, b \% c, c) & otherwaise
end{cases}
]