类欧(万欧)学习笔记
主要是万欧。
定义
有三种等价的定义。
定义一:序列
给定半群和半群上的元素 \(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\)。
定义三:数轴
给定半群和半群上的元素 \(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\))
- 若 \(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\),合并起来。
-
其他情况,注意到此时定义二中的直线斜率 \(<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 \]
- 若 \(m>0\),
例题
模板类欧
求
我们需要维护:当前的 \(\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
注意这题要手动构造半群,单纯的矩阵/置换无法表示。

浙公网安备 33010602011771号