[ARC123F]Insert Addition
Posted Tan_tan_tann
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[ARC123F]Insert Addition相关的知识,希望对你有一定的参考价值。
Insert Addition
题解
前置芝士:Stern-Brocot 树与 Farey 序列
只是简要叙述,没啥用,建议跳过
Stern-Brocot树是一种维护分数的数据结构,树上的节点都是最简形式的分数,且像二叉查找树一样是有序的,在这棵树上我们可以
O
(
l
o
g
n
)
O\\left(log\\,n\\right)
O(logn)的查找到一个最简形式的分数。
与其说其是一颗树,它更像一个序列,最开始只有
{
0
1
,
1
0
}
\\{\\frac{0}{1},\\frac{1}{0}\\}
{10,01},再不断通过序列中相邻两项
a
/
b
a/b
a/b与
c
/
d
c/d
c/d像糖水混合一样得到新的点
a
+
b
c
+
d
\\frac{a+b}{c+d}
c+da+b,通过糖水混合的原理,显然是有序的。
很明显,如果一直这样进行下去,这个序列将会变得无限大,而
F
a
r
e
y
Farey
Farey序列则是选取其中分母不超过某个值得点构成得序列。
很明显,这两者都是可以像线段树一样通过
O
(
n
l
o
g
n
)
O\\left(nlog\\,n\\right)
O(nlogn)的时间复杂度生成,而对上面的节点,我们可以采用生成它的两个点
(
a
b
,
c
d
)
(\\frac{a}{b},\\frac{c}{d})
(ba,dc)的形式来表示,这种表示方法是唯一的,而且更方便它的遗传与变异。
如果你想了解更多与它相关的东西,可以参考上面的链接。
下面我们的做法讲涉及到它的几条性质。
进入正题
应该还不晚
由于本题要求的序列构建方式与Stern-Brocot树十分相似,我们很容易想到这上面去。
我们可以讲原题中的
a
a
a与
b
b
b转化成一个系数对
(
1
,
0
)
(1,0)
(1,0)与
(
0
,
1
)
(0,1)
(0,1),序列的生成也就像Stern-Brocot,变成了参数对的左右相加。
性质1
- 对于可以某种方式相邻的两点,它们的系数对
(
x
1
,
y
1
)
(x_1,y_1)
(x1,y1)与
(
x
2
,
y
2
)
(x_2,y_2)
(x2,y2)一定满足条件
x
1
y
2
−
x
2
y
1
=
1
x_1y_2-x_2y_1=1
x1y2−x2y1=1。
显然,这两者之间有一个是由另一个与其它的系数对一起构成的。
我们不妨设 ( x 2 , y 2 ) (x_2,y_2) (x2,y2)是由 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)与 ( x 3 , y 3 ) (x_3,y_3) (x3,y3)一起构成的,显然有
x 1 y 2 − x 2 y 1 = x 1 ( y 1 + y 3 ) − ( x 1 + x 3 ) y 1 = x 1 y 3 − x 3 y 1 x_1y_2-x_2y_1=x_1(y_1+y_3)-(x_1+x_3)y_1=x_1y_3-x_3y_1 x1y2−x2y1=x1(y1+y3)−(x1+x3)y1=x1y3−x3y1
显然,当系数对 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)与 ( x 3 , y 1 ) (x_3,y_1) (x3,y1)满足条件是,它满足条件。
一直这样追溯下去,最开始的系数对 ( 0 , 1 ) (0,1) (0,1)与 ( 1 , 0 ) (1,0) (1,0)显然是满足条件的,所以对于任意两个相邻的系数对,它们都满足这样的条件。
性质2
- 对于任意两个系数对
(
x
1
,
y
1
)
(x_1,y_1)
(x1,y1)与
(
x
2
,
y
2
)
(x_2,y_2)
(x2,y2),如果它们满足条件
x
1
y
2
−
x
2
y
1
=
1
x_1y_2-x_2y_1=1
x1y2−x2y1=1,它们在树上肯定可以以某种方式相邻。
这条性质的证明方法与上一条很像,可以请读者们自行推导。
推论
- 对于其中的任意一个节点的系数对
(
x
,
y
)
(x,y)
(x,y),一定满足
(
x
,
y
)
=
1
\\left(x,y\\right)=1
(x,y)=1(这里是最大公因数)。
这也就是我们之前说明Stern-Brocot树时的最简分数。
很明显,对于其中的任意一个系数对 ( x , y ) (x,y) (x,y),肯定与某一个系数对 ( z , w ) (z,w) (z,w)一起满足 x w − y z = 1 xw-yz=1 xw−yz=1。
如果 ( x , y ) ≠ 1 (x,y)\\not = 1 (x,y)=1,显然有 ( x , y ) ( x w ( x , y ) − y z ( x , y ) ) = 1 (x,y)(\\frac{xw}{(x,y)}-\\frac{yz}{(x,y)})= 1 (x,y)((x,y)xw−(x,y)yz)=1, ( x w ( x ,以上是关于[ARC123F]Insert Addition的主要内容,如果未能解决你的问题,请参考以下文章