类欧(万欧)学习笔记

主要是万欧。

定义

有三种等价的定义。

定义一:序列

给定半群和半群上的元素 \(U,R\),以及四个参数 \(a,b,c,n\ge 0\),显然有唯一的一个序列 \(S\) 满足:

  • \(\forall 1\le i\le |S|,S_i\in\{U,R\}\);
  • 序列中共有 \(n\) 个 \(R\),第 \(i\) 个 \(R\) 前有 \(\left\lfloor\frac{ai+b}{c}\right\rfloor\) 个 \(U\);
  • 序列以 \(R\) 结尾。

这个序列的运算结果就是万欧的答案,这是最严谨的定义,没有任何 corner case,硬说有的话,就是 \(n=0\) 时答案为单位元。

定义二:平面网格

给定半群和半群上的元素 \(U,R\),以及四个参数 \(a,b,c,n\ge 0\)。

在平面坐标系上画出直线 \(y=\frac{ax+b}{c}\),从 \(x=0\) 开始向右沿直线走到 \(x=n\),维护一个 \(mul\),初始为单位元。每穿过一次 \(y=k,k\in\mathbb{N}_+\),\(mul\leftarrow mul\cdot U\);每穿过一次 \(x=k,k\in\mathbb{N}_+\),\(mul\leftarrow mul\cdot R\)。

特别地:

  • 截距下方 \(y=k,k\in\mathbb{N}_+\) 也要被统计;
  • 如果穿过整点,认为先乘 \(U\) 后乘 \(R\)(这是整除决定的);
  • 最后一次“碰到” \(x=n\)(\(y=k,k\in\mathbb{N}_+\) 同理)时要乘 \(R\)。

图来自 oi-wiki

定义三:数轴

给定半群和半群上的元素 \(U,R\),以及四个参数 \(a,b,c,n\ge 0\)。

在数轴上,从 \(b\) 开始跳 \(n\) 步,每步长 \(a\),维护一个 \(mul\),初始为单位元。每跨过一次 \(kc,k\in\mathbb{N}_+\),\(mul\leftarrow mul\cdot U\),每步跳完,\(mul\leftarrow mul\cdot R\)。

这个定义的细节与定义二类似,不过多赘述。

算法流程

由于多种定义各有优劣,笔者可能会在多种定义间反复横跳。

2026.07.07 upd:改为主要使用定义一处理,偶尔提到定义二,用于直观感受。

记我们当前要求的答案为 \(f(a,b,c,n,U,R)\),其中 \(a,b,c\ge 0\),具体问题中,不一定总满足 \(a,b,c\ge 0\),此时需要进行一些取模(具体情况具体分析),转化为 \(a,b,c\ge 0\)。

  • 若 \(b\ge c\),在定义一中,发现 \(\left\lfloor\frac{ai+b}{c}\right\rfloor=\left\lfloor\frac{ai+b\text{ mod }c+c\left\lfloor\frac{b}{c}\right\rfloor}{c}\right\rfloor=\left\lfloor\frac{ai+b\text{ mod }c}{c}\right\rfloor+\left\lfloor\frac{b}{c}\right\rfloor\)。(在定义二中,这意味着截距较大,提前乘上若干 \(U\),把直线向下平移,\(y=\frac{ax+b}c-k=\frac{ax+b-kc}c\),即 \(b\) 减去整数倍 \(c\))

\[f(a,b,c,n,U,R)=U^{\left\lfloor\frac{b}{c}\right\rfloor}f(a,b\text{ mod }c,c,n,U,R) \]

  • 若 \(a\ge c\),在定义一中,发现 \(\left\lfloor\frac{ai+b}{c}\right\rfloor=\left\lfloor\frac{(a\text{ mod }c+c\left\lfloor\frac{a}{c}\right\rfloor)i+b}{c}\right\rfloor=\left\lfloor\frac{(a\text{ mod }c)i+b}{c}\right\rfloor+\left\lfloor\frac{a}{c}\right\rfloor i\),则每个 \(R\) 前至少紧跟着 \(\left\lfloor\frac{a}{c}\right\rfloor\) 个 \(U\),合并起来。

\[f(a,b,c,n)=f(a\text{ mod }c,b,c,n,U,U^{\left\lfloor\frac{a}c\right\rfloor}R) \]

  • 其他情况,注意到此时定义二中的直线斜率 \(<1\),考虑交换两维使斜率 \(\ge1\),就可以转为上面两个情况。

    这里情况比较复杂,所以我们从定义一的角度观察,我们设转化后问题的参数为 \(a',b',c',U',R'\),不难发现 \(U'=R,R'=U\)。

    原问题上,第 \(i\) 个 \(R\) 在第 \(j\) 个 \(U\) 后当且仅当 \(j\le\left\lfloor\frac{ai+b}{c}\right\rfloor\),推导:

    \[\begin{align*} j&\le\left\lfloor\frac{ai+b}{c}\right\rfloor \\ \Leftrightarrow j&\le\frac{ai+b}c \\ \Leftrightarrow \frac{cj-b}a&\le i \\ \Leftrightarrow \left\lceil\frac{cj-b}a\right\rceil&\le i \end{align*} \]

    故新问题上,第 \(j\) 个 \(R'=U\) 在第 \(i\) 个 \(U'=R\) 后当且仅当 \(i\le\left\lceil\frac{cj-b}a\right\rceil-1=\left\lfloor\frac{cj-b-1}a\right\rfloor\)(注意这里交换了前后,故不等号方向与前面相反)。

    注意到此时 \(b'=-b-1<0\),不符合我们的约束,而 \(c-b-1\ge 0\),于是手动计算第一个 \(R'\) 及以前的部分 \(R^{\left\lfloor\frac{c-b-1}a\right\rfloor}U\),并令 \(j'=j-1\),得到 \(i\le\left\lfloor\frac{cj'+c-b-1}{a}\right\rfloor-\left\lfloor\frac{c-b-1}{a}\right\rfloor=\left\lfloor\frac{cj'+(c-b-1)\text{ mod }a}{a}\right\rfloor\)(这个等号与 \(b\ge c\) 情况推导相似)。

    注意到原序列以 \(R\) 结尾,新序列以 \(R'=U\) 结尾,转化后会产生 \(R^x\) 的余项。先算一下 \(j'=j-1\) 的范围:

    \[\begin{align*} \left\lfloor\frac{cj-b-1}{a}\right\rfloor&<n \\ \Leftrightarrow\left\lceil\frac{cj-b}{a}\right\rceil-1&<n \\ \Leftrightarrow\left\lceil\frac{cj-b}{a}\right\rceil&\le n \\ \Leftrightarrow\frac{cj-b}{a}&\le n \\ \Leftrightarrow j&\le\frac{an+b}{c} \\ \Leftrightarrow j&\le\left\lfloor\frac{an+b}{c}\right\rfloor \\ \end{align*} \]

    令 \(m=\left\lfloor\frac{an+b}{c}\right\rfloor\),则 \(1\le j'\le m-1\),余项 \(x=n-\left\lfloor\frac{cm-b-1}{a}\right\rfloor\)。综上:

    • 若 \(m>0\),

      \[\begin{align*} f(a,b,c,n,U,R)&=R^{\left\lfloor\frac{c-b-1}a\right\rfloor}U \\ &\cdot f(c,(c-b-1)\text{ mod }a,a,m-1,R,U) \\ &\cdot R^{n-\left\lfloor\frac{cm-b-1}{a}\right\rfloor} \end{align*} \]

    • 若 \(m=0\),无论直观理解还是推导都会发现前文所述不能处理,不过可以直接计算:

      \[f(a,b,c,n,U,R)=R^n \]

例题

模板类欧

求

\[\sum\limits_{i=1}^n\left\lfloor\frac{ai+b}c\right\rfloor \]

我们需要维护:当前的 \(\left\lfloor\frac{ai+b}c\right\rfloor,i,\sum_{j\le i}\left\lfloor\frac{aj+b}c\right\rfloor\)。我们发现只需要这几个就够了。

具体地,我们考虑给一个“阶梯型”维护宽、高、面积 \((x,y,S)\)。不难推出合并公式为 \((x_1,y_1,S_1)\cdot (x_2,y_2,S_2)=(x_1+x_2,y_1+y_2,S_1+y_1x_2+S_2)\)。

QOJ14719 Planting Trees

注意到性质 \([a\text{ mod }m<b\text{ mod }m]=\left\lfloor\frac{a}m\right\rfloor-\left\lfloor\frac{b}m\right\rfloor-\left\lfloor\frac{a-b}m\right\rfloor\)。

???+ 证明

设 \(a=xm+p,b=ym+q\),其中 \(p,q\in[0,m)\),不难推出 \(|p-q|<m\)。

则 \(a-b=(x-y)m+(p-q)\)。

若 \(p-q<0\),则 \(a-b=(x-y-1)+(m+p-q)\),则 \(\left\lfloor\frac{a-b}m\right\rfloor=x-y-1\)。

若 \(p-q>0\),则 \(\left\lfloor\frac{a-b}m\right\rfloor=x-y\)。

把 \(\left\lfloor\frac{a-b}m\right\rfloor\) 代入 \(\left\lfloor\frac{a}m\right\rfloor-\left\lfloor\frac{b}m\right\rfloor-\left\lfloor\frac{a-b}m\right\rfloor\),证毕。

???-

然后直接跑三个模板类欧即可。

NOI2023广东省队集训0613

注意这题要手动构造半群,单纯的矩阵/置换无法表示。

posted @ 2026-05-22 19:48  SmpaelFx  阅读(36)  评论(0)    收藏  举报