万能欧几里得 — 学习笔记

· · 个人记录

对于类欧,我们要解决的问题大概是求这样一个和式:

\sum\limits_{x=1}^{M}x^A\left\lfloor\frac{px+r}{q}\right\rfloor^B

其中 r\in [0,q)

然而类欧推式子很唐,并且也不是很能推广,于是我们考虑一个更通用的模型。

模型:对于一条直线 y=\frac{px+r}{q},我们取其 x\in(0,M] 的部分,维护一个信息,从左往右,它每与一条平行于 x 轴的坐标轴相交,执行 U 操作,每与一条平行于 y 轴的坐标轴相交,执行 R 操作。求出经过所有操作之后的信息。如果与两个坐标轴同时相交,我们默认先执行 U 再执行 R

更形式化一点的定义:有两种操作 U,R,我们交替执行两种操作,操作 R 执行恰好 M 次,且第 xR 操作之前有恰好 \lfloor\frac{px+r}{q}\rfloorU 操作,求出最后结果。

我们定义这个值为 F(p,q,r,M,U,R)。类似于求 \gcd 的辗转相除,我们用两个操作来在 O(\log M) 的时间复杂度内解决这个问题。这里默认操作的复合是 O(1) 的,且操作要满足结合律

如果 p\geq q,那么两次 R 操作之间有 \lfloor\frac{p(x+1)+r}{q}\rfloor-\lfloor\frac{px+r}{q}\rfloorU 操作,这个值显然至少是 \lfloor\frac{p}{q}\rfloor。我们考虑把这 \lfloor\frac{p}{q}\rfloorU 和下一次 R 合并,也就是令 R'=U^{\lfloor\frac{p}{q}\rfloor}R,这时剩余的 U 恰好有 \lfloor\frac{(p\bmod q)(x+1)+r}{q}\rfloor-\lfloor\frac{(p\bmod q)x+r}{q}\rfloor 个,那么我们就得到了:

F(p,q,r,M,U,R)=F(p\bmod q,q,r,M,U,U^{\lfloor\frac{p}{q}\rfloor}R)

如果 p<q,我们希望将 p,q 地位交换。考虑求一下第 yU 之前有多少 R 操作,列出不等式 y> \frac{px+r}{q},也就是 x\leq \frac{qy-r-1}{p}。这个非常符合原问题的形式,但是唯一有小毛病的地方就是后面的 +r 变成了 -r-1,这个是负值。解决方法也很简单,将式子改成 \frac{q(y-1)+(q-r-1)}{p},然后特殊处理第一段和最后一段 R 即可。得到的式子是:

F(p,q,r,M,U,R)=R^{\lfloor\frac{q-r-1}{p}\rfloor}U\times F(q,p,(q-r-1)\bmod p,\left\lfloor\frac{pM+r}{q}\right\rfloor-1,R,U)\times R^{M-\lfloor\frac{pM-1-(pM+r)\bmod q}{p}\rfloor}

于是有了这两个式子,我们就搞定了我们想解决的问题。

例题:B - Yet Another Subsequence Problem。
来源:第九届中国大学生程序设计竞赛 — 秦皇岛站;The 2nd Universal Cup. Stage 9: Qinhuangdao。

gugugu。