万能欧几里得

#6440. 万能欧几里得

计算 ∑ i = 1 L A i B ⌊ P i + R Q ⌋ \sum_{i=1}^{L}A^{i}B^{\lfloor\frac{Pi+R}{Q}\rfloor} i=1LAiBQPi+R

  • 万能欧几里得算法:我们做直线 y = P i + R Q y=\frac{Pi+R}{Q} y=QPi+R ( 0 , R / Q ) (0,R/Q) (0,R/Q) 开始走,维护一个三元组 ( a , b , c ) (a,b,c) (a,b,c),碰到上边界则将 b b b 左乘上 B B B,碰到左边界就把 a a a 右乘上 A A A,并更新答案 c ⇐ a ∗ b c\Leftarrow a*b cab

  • 发现这个操作可以构成一个序列,形如 { B . B , A , B , B , B , A , B , B , A , B , B , B , A } \{B.B,A,B,B,B,A,B,B,A,B,B,B,A\} {B.B,A,B,B,B,A,B,B,A,B,B,B,A}
    万能欧几里得算法可以将这个序列合并,压缩使得我们能快速得到答案
    f ( n , p , q , r , a , b ) = ∑ i = 1 n A i B ⌊ p i + r q ⌋ f(n,p,q,r,a,b)=\sum_{i=1}^nA^{i}B^{\lfloor\frac{pi+r}{q}\rfloor} f(n,p,q,r,a,b)=i=1nAiBqpi+r,其中 a , b a,b a,b 表示我们的一段序列

  • p ≥ q p\ge q pq,则发现一个 A A A 前面一定有 ⌊ p q ⌋ \lfloor\frac{p}{q}\rfloor qp B B B
    于是我们可以令 A ′ = B ∗ ⌊ p q ⌋ + A A'=B*\lfloor\frac{p}{q}\rfloor+A A=Bqp+A,实现了序列的压缩

  • p < q p<q p<q,我们可以通过变换使其变为 p ≥ q p\ge q pq 的情况,这个变换就叫做坐标旋转
    我们考虑求出 y = ⌊ p x + r q ⌋ y=\lfloor\frac{px+r}{q}\rfloor y=qpx+r 的反函数,即为解一个方程
    y ≤ ⌊ p x + r q ⌋ < y + 1 q y − r ≤ p x < q y + q − r ⌊ q y − r + p − 1 p ⌋ ≤ x < ⌊ q y + q − r + p − 1 p ⌋ y\le \lfloor\frac{px+r}{q}\rfloor<y+1\\ qy-r\le px<qy+q-r\\ \lfloor\frac{qy-r+p-1}{p}\rfloor\le x< \lfloor\frac{qy+q-r+p-1}{p}\rfloor yqpx+r<y+1qyrpx<qy+qrpqyr+p1x<pqy+qr+p1
    那么若实现坐标翻转,某一个特定的 A A A 可以前可以有
    ⌊ q y + q − r − 1 p ⌋ − ⌊ q y − r − 1 p ⌋ \lfloor\frac{qy+q-r-1}{p}\rfloor-\lfloor\frac{qy-r-1}{p}\rfloor pqy+qr1pqyr1 B B B,对比前面一个特定的 A A A前有 ⌊ p x + p + r q ⌋ − ⌊ p x + r q ⌋ \lfloor\frac{px+p+r}{q}\rfloor-\lfloor\frac{px+r}{q}\rfloor qpx+p+rqpx+r,那么新的直线可以写作 x = q y − r − 1 p x=\frac{qy-r-1}{p} x=pqyr1
    注意分母无论减去多少个分子都不会影响操作序列
    然后这里的定义域要映射成值域, y = 1 y=1 y=1 时不能取满所以我们单独计算,所以新的定义域变成了 ( 1 , 、 ⌊ p n + r q ⌋ ] (1,、\lfloor\frac{pn+r}{q}\rfloor] (1,qpn+r],同时定义域后方还有一些点没有算到,同样单独计算
    然后我们就可以递归到 f ( ⌊ p n + r q ⌋ − 1 , q , p , q − r − 1 , b , a ) f(\lfloor\frac{pn+r}{q}\rfloor-1,q,p,q-r-1,b,a) f(qpn+r1,q,p,qr1,b,a) 来计算
    C o d e Code Code

  • 既然它是万能的,那么我们可以顺手切掉一道 【模板】类欧几里得算法
    维护一个 5 元组 ( i , ⌊ a i + b c ⌋ , ∑ ⌊ a i + b c ⌋ , ∑ ⌊ a i + b c ⌋ 2 ∑ i ⌊ a i + b c ⌋ ) (i,\lfloor \frac{ai+b}{c}\rfloor,\sum\lfloor \frac{ai+b}{c}\rfloor,\sum \lfloor \frac{ai+b}{c}\rfloor^2\sum i \lfloor \frac{ai+b}{c}\rfloor) (i,cai+b,cai+b,cai+b2icai+b) 合并的时候拆项讨论就做完了
    比类欧几里得好写到哪里去了,不过脑子够笨还是码了好久
    C o d e Code Code

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FSYo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值