类欧几里得和万能欧几里得

\(\text{Example 1}\)

先假设 \(a<c,b<c\)

限制转换为当有两个求和第二个求和被第一个求和约束时,交换两个约束取消第二个求和被第一个求和的约束条件时,需要加上一个条件不等式作为第二个求和的约束,如下所述:

\[\sum\limits_{i=1}^n \sum\limits_{j=1}^i p(i,j)=\sum\limits_{j=1}^n \sum\limits_{i=1}^n p(i,j)[j \le i] \]

同时你还需要知道:

\[\lfloor \dfrac{a}{b} \rfloor + 1 = \lceil \dfrac{a}{b} \rceil \]

那么考虑去简化式子。

\[\begin{aligned} f(a,b,c,n) &= \sum^n_{i = 0} \sum^{\lfloor \frac{ai + b}{c} \rfloor - 1}_{j = 0} 1 \\&= \sum^{\lfloor \frac{an+b}{c} \rfloor}_{j=0} \sum^n_{i=0} 1[j < \lfloor \frac{ai + b}{c} \rfloor] \\&= \sum^{\lfloor \frac{an+b}{c} \rfloor}_{j=0} \sum^n_{i=0} 1[j + 1 \le \lfloor \frac{ai + b}{c} \rfloor] \\&= \sum^{\lfloor \frac{an+b}{c} \rfloor}_{j=0} \sum^n_{i=0} 1[j + 1 \le \frac{ai + b}{c} ] \\&= \sum^{\lfloor \frac{an+b}{c} \rfloor}_{j=0} \sum^n_{i=0} 1[jc + c \le ai + b] \\&= \sum^{\lfloor \frac{an+b}{c} \rfloor}_{j=0} \sum^n_{i=0} 1[jc + c - b \le ai] \\&= \sum^{\lfloor \frac{an+b}{c} \rfloor}_{j=0} \sum^n_{i=0} 1[jc + c - b - 1 < ai] \\&= \sum^{\lfloor \frac{an+b}{c} \rfloor}_{j=0} \sum^n_{i=0} 1[\lfloor \dfrac{jc+c-b-1}{a} \rfloor < i] \\&= \sum^{\lfloor \frac{an+b}{c} \rfloor}_{j=0} \sum^n_{i=\lfloor \frac{jc+c-b-1}{a} \rfloor + 1} 1 \\&= \sum^{\lfloor \frac{an+b}{c} \rfloor}_{j=0} (n - \lfloor \dfrac{jc + c - b - 1}{a} \rfloor) \\&= n \lfloor \dfrac{an + b}{c} \rfloor - \sum^{\lfloor \frac{an + b}{c} \rfloor - 1}_{j = 0} \lfloor \frac{jc + c - b - 1}{a} \rfloor \\&= n \lfloor \dfrac{an + b}{c} \rfloor - f(c,c + b - 1,a,\lfloor \frac{an + b}{c} \rfloor - 1) \end{aligned} \]

那么令 \(m = \lfloor \frac{an + b}{c} \rfloor\),那么我们有:

\[f(a,b,c,n) = nm - f(c,c - b - 1,a,m - 1) \]

接下来考虑去化简 \(h(a,b,c,n)\)。根据上面的推到,我们可以知道:

\[\begin{aligned} h(a,b,c,n) &= \sum^n_{i=0} i \lfloor \dfrac{ai + b}{c} \rfloor \\&= \sum^{\lfloor \frac{an+b}{c} \rfloor - 1}_{j = 0} \sum_{i=\lfloor \frac{jc+c-b - 1}{a}\rfloor+1}^ni \end{aligned} \]

此时记 \(t = \lfloor \frac{jc + c - b - 1}{a} \rfloor,m = \lfloor \frac{an + b}{c} \rfloor\),那么我们就有:

\[\begin{aligned} h(a,b,c,n)&= \sum_{j=0}^{\lfloor \frac{an + b}{c}\rfloor-1}\sum_{i = \lfloor \frac{jc + c - b - 1}{a}\rfloor + 1}^n i\\&= \sum_{j = 0} ^ {m - 1}\sum_{i = t + 1}^n i\\&= \sum_{j = 0} ^ {m - 1}\frac{(t + n + 1)(n - t)}{2}\\&= \sum_{j = 0} ^ {m - 1}\frac{1}{2}((n^2 + n) - (t^2 + t))\\&= \frac{mn^2+mn}{2}-\frac{1}{2}\sum_{j=0}^{m-1}t^2-\frac{1}{2}\sum_{j=0}^{m-1}t\\&= \frac{1}{2}(mn(n+1)-g(c,c-b-1,a,m-1)-f(c,c-b-1,a,m-1)) \end{aligned} \]

我们知道 \(2 \sum \limits^n_{i=1} i - n = n^2\),所以现在考虑化简 \(g(a,b,c,n)\)

\[\begin{aligned} g(a,b,c,n)&=\sum_{i = 0}^n \lfloor \frac{ai + b}{c} \rfloor^2\\&= \sum_{i = 0}^n(2\sum_{j=1}^{\lfloor \frac{ai + b}{c}\rfloor}j - \lfloor \frac{ai+b}{c}\rfloor )\\&= \sum_{i=0}^n(2\sum_{j=1}^{\lfloor \frac{ai+b}{c}\rfloor}j - f(a,b,c,n))\\&=\sum_{i = 0}^n\sum_{j = 1}^{\lfloor \frac{ai + b}{c}\rfloor}j-\sum_{i = 0}^n\lfloor \frac{ai + b}{c}\rfloor\\&= 2\sum_{i = 0}^n\sum_{j = 0}^{\lfloor \frac{ai + b}{c}\rfloor - 1}(j + 1) - f(a,b,c,n)\\&= 2\sum_{i = 0}^n\sum_{j = 0}^{\lfloor \frac{an + b}{c}\rfloor - 1}(j + 1)[j\le\lfloor \frac{ai + b}{c}\rfloor - 1] - f(a,b,c,n)\\&= 2\sum_{i = 0}^n\sum_{j = 0}^{m - 1}(j + 1)[j\le\lfloor \frac{ai+b}{c}\rfloor-1]-f(a,b,c,n)\\&= 2\sum_{j=0}^{m - 1}(j + 1)(n - \lfloor \frac{jc + c - b - 1}{a}\rfloor) - f(a,b,c,n)\\&= 2\sum_{j=0}^{m - 1}(j + 1)n - 2\sum_{j = 0}^{m - 1}(j + 1)\lfloor \frac{jc + c - b - 1}{a}\rfloor - f(a,b,c,n)\\&= (m + 1)mn - 2\sum_{j = 0}^{m-1}j\lfloor\frac{jc + c-b - 1}{a} \rfloor - 2\sum_{j = 0} ^ {m - 1}\lfloor\frac{jc + c - b - 1}{a}\rfloor-f(a,b,c,n)\\& =(m + 1)mn - 2(h(c,c - b - 1,a,m - 1) - f(c,c - b - 1,a,m - 1)) - f(a,b,c,n)\\ \end{aligned} \]

那么当 \(a<c,b<c\) 的时候,我们已经会算了。那么考虑 \(a \ge c,b \ge c\) 的情况。考虑令 \(a^{\prime} = a \bmod c,b^{\prime} = b \bmod c\)。那么可得:

\[\begin{aligned} f(a,b,c,n) &= \sum^n_{i = 0} (\lfloor \frac{a^{\prime} i + b}{c} \rfloor + i\lfloor \frac{a}{c} \rfloor + \lfloor \frac{b}{c} \rfloor)\\&= f(a^{\prime},b^{\prime},c,n) + \frac{n(n+1)}{2} \lfloor \frac{a}{c} \rfloor+\frac{n+1}{2} \lfloor \frac{b}{c} \rfloor\\ g(a,b,c,n) &= \sum_{i = 0} ^ n \lfloor \frac{ai + b}{c} \rfloor^2\\&= \sum_{i = 0}^n(\lfloor\frac{a^{\prime}i + b^{\prime}}{c} \rfloor + i \lfloor\frac{a}{c}\rfloor + \lfloor\frac{b}{c}\rfloor)^2\\&= \sum_{i = 0}^n(\lfloor\frac{a^{\prime}i+b^{\prime}}{c}\rfloor^2+i^2\lfloor\frac{a}{c}\rfloor^2+\lfloor\frac{b}{c}\rfloor^2+2i\lfloor\frac{a^{\prime}i+b^{\prime}}{c}\rfloor+2i\lfloor\frac{a}{c}\rfloor\lfloor\frac{b}{c}\rfloor+2\lfloor\frac{b}{c}\rfloor\lfloor\frac{a^{\prime}i+b^{\prime}}{c}\rfloor)\\&= g(a^{\prime},b^{\prime},c,n)+\frac{n(n+1)(2n+1)}{6}\lfloor\frac{a}{c}\rfloor^2+(n+1)\lfloor\frac{b}{c}\rfloor^2 +2(h(a^{\prime},b^{\prime},c,n)+\lfloor\frac{b}{c}\rfloor f(a^{\prime},b^{\prime},c,n)+\frac{n(n+1)}{2}\lfloor\frac{a}{c}\rfloor\lfloor\frac{b}{c}\rfloor)\\ h(a,b,c,n) &= a\sum_{i=0}^ni\lfloor\frac{ai+b}{c}\rfloor\\&= \sum_{i=0}^ni(\lfloor\frac{a^{\prime}i+b^{\prime}}{c}\rfloor+i\lfloor\frac{a}{c}\rfloor+\lfloor\frac{b}{c}\rfloor)\\&= \sum_{i=0}^n h(a^{\prime},b^{\prime},c,n)+\frac{n(n+1)(2n+1)}{6}\lfloor\frac{a}{c}\rfloor+\frac{n(n+1)}{2}\lfloor\frac{b}{c}\rfloor \end{aligned} \]

这个复杂度为 \(\mathrm O(\log n)\)

万能欧几里得算法

类欧几里得算法的应用面积还是太小了一点。所以这了我们讨论一种更为一般的方法,它进一步抽象了上述过程。

此时我们从左至右考虑一个函数在 \((0,n]\) 内的直线并维护一个字符串 \(S\),每当和 \(x = c\)\(c\) 为整数)相交时,在 \(S\) 的末尾添加 \(R\),每当和 \(y = c\)\(c\) 为整数)相交时,在 \(S\) 的末尾添加 \(U\)。如果你经过了一个整点,那么先写一个 \(U\) 再写 \(R\)

万能欧几里得实际上就是需要去找到一个映射将 \(S\) 映射到 \(f(S)\) 上,且有 \(f(S_1) \cdot f(S_2) = f(S1 + S2)\),其中的这个 \(+\) 表示将两个字符串拼接起来。而 \(f(S)\) 是很明显的就是 \(\sum \{f(S_{[1,r]} : S_r = R)\}\),而我们需要做的就是去找到一个转移方式。

就以最经典的为例:

\[f(a,b,c,n) = \sum^n_{i = 1} \lfloor \frac{ai + b}{c} \rfloor \]

设参数 \((a,b,c,n)\) 的函数是:

\[y = \frac{ax+b}{c} \]

我们的 \(f(S)\) 已经知道了。但是我们发现如果只记录一个答案肯定不行,我们完全无法转移,所以对于每一个 \(S\) 我们都再记录一个 \(x(S),y(S)\) 表示 \(S\)\(R\)\(U\) 的数量。所以我们考虑记录一个向量 \(v_s = (x(S),y(S),f(S))\)。每向上穿过一次网格线,\(x(S)\) 就加一。每一次向左穿越网格线,\(y(S)\) 就加一。

那么我们就可以知道 \(f(S_1) \cdot f(S_2) = f(S_1) + f(S_2) + (S_2) y(S_1)\)。而我们对于两个向量的乘积就是:

\[v_{S_1} \cdot v_{S_2} = (x(S_1) + x(S_2),y(S_1) + y(S_2),f(S_1) + f(S_2) + x(S_2)y(S_1)) \]

而群 \((v,\cdot)\) 就是一个幺半群,其幺元为 \((0,0,0)\)。同时我们有 \(v_U = (0,1,0),v_R = (1,0,0)\)

当然具体情况,具体分析,对于每一个不同的题,我们的乘法和向量维护的东西是不同的。

具体流程

记字符串对应的操作的乘积为 \(F(a,b,c,n,U,R)\),然后分类讨论。

  • \(b \ge c\) 时,\(S\) 最开始有 \(\lfloor \frac{b}{c} \rfloor\)\(U\),那么我们可以直接计算他们乘积,然后将这些 \(U\) 从这个字符串中删除。删除完毕之后,第 \(i\)\(R\) 的前方的 \(U\) 的数量为:

\[\lfloor \frac{ai + b}{c} \rfloor - \lfloor \frac{b}{c} \rfloor = \lfloor \frac{ai + (b \bmod c)}{c} \rfloor \]

那么就有 \(F(a,b,c,n,U,R) = U^{\lfloor \frac{b}{c} \rfloor} \cdot F(a,b \bmod c,c,n,U,R)\)

  • \(a \ge c\) 时,\(S\) 中的每一个 \(R\) 前面都会有至少 \(\lfloor \frac{a}{c} \rfloor\)\(U\),那么考虑用 \(U^{\lfloor \frac{a}{c} \rfloor} \cdot R\) 来代替 \(R\)。在合并后,每一个 \(R\) 前面 \(U\) 的数量为:

\[\lfloor \frac{ai + b}{c} \rfloor - \lfloor \frac{a}{c} \rfloor i = \lfloor \frac{(a \bmod c)i + b}{c} \rfloor \]

那么就有 \(F(a,b,c,n,U,R) = F(a \bmod c,b,c,n,U,U^{\lfloor \frac{a}{c} \rfloor} \cdot R)\)

  • 剩下的情况,考虑去反转 \(x,y\) 轴。此时考虑设反转 \(x,y\) 轴之后的系数为 \((a^{\prime},b^{\prime},c^{\prime},n^{\prime})\)。那么我们目前知道,第 \(j\)\(U\)\(R\) 的数量为 \(\lfloor \frac{a^{\prime}j + b}{c} \rfloor\),且有 \(n^{\prime}\)\(U\)

\(j\)\(U\) 前方的 \(R\) 的数量,就等于最大的 \(i\) 使得:

\[\lfloor \frac{ai + c}{b} \rfloor < j \]

显然的,这个 \(i = \lfloor \frac{jc - b - 1}{a} \rfloor\)。但是需要注意:

  • 如果 \(-(b+1) / a < 0\),那么考虑将函数段向左平移一个单位,就可以让截距项恢复为非负数。这个操作就等于将交换前的第一段 \(R^{\lfloor \frac{c - b - 1}{a} \rfloor} \cdot U\) 提取出来,然后交换剩余的。
  • 在交换过后会存在多余的 \(U\),那么我们可以把原本的序列中最后的连续的 \(R\) 提取出来,这个 \(R\) 的个数为 \(n - \lfloor \frac{cm - b - 1}{a} \rfloor\)

去掉头尾若干个字符后,第 \(j\)\(U\) 前方的 \(R\) 的数量变为:

\[\lfloor \frac{c(j+1) - b - 1}{a} \rfloor - \lfloor \frac{c - b - 1}{a} \rfloor = \lfloor \frac{cj + (c - b - 1) \bmod a}{a} \rfloor \]

那么我们就有:

\[F(a,b,c,n,U,R) = R^{\lfloor \frac{c - b - 1}{a} \rfloor} \cdot U \cdot F(c,(c - b - 1) \bmod a,a,m - 1,R,U) R^{n - \lfloor \frac{cm - b - 1}{a} \rfloor} \]

但是需要注意 \(m = 0\) 的时候返回 \(R^m\)

复杂度为 \(\mathrm O(\log \max(a,c) + \log \frac{b}{c})\)

posted @ 2025-08-21 19:16  sqrtqwq  阅读(16)  评论(0)    收藏  举报