ABC 443 解题报告

A,B,C

D

转化题意:使最后的 \(R_i\) 数组尽可能大。

显然,\(R_i\) 不增,所以最小值不会改变,那么它左右两个点的最大值也只能是它加一,称这个操作为扩展。于是不妨维护一个序列表示当前未扩展过的最小值位置,然后往左右两边尝试扩展,并加入下一次操作的序列。

E

记忆化搜索,维护三个信息,横纵坐标和当前格子是否是一个墙格。

F

同余最短路。记 \(f_{i,j}\) 表示使取得的数在模 \(n\) 意义下同余 \(i\),且最后一个数是 \(j\) 的最小位数,转移时枚举往后加什么数。额外维护 \(pre\) 数组表示从哪一个状态转移过来。

时间复杂度为 \(O(n|\Sigma|)\)

G

同余不等式考虑把同余去掉。推式子:

\[\begin{aligned} k&<(Ak+B) \pmod M\\ k+1&\le Ak+B-M\lfloor \dfrac{Ak-B}{M}\rfloor\\ \lfloor \dfrac{Ak-B}{M}\rfloor&\le\dfrac{(A-1)k+(B-1)}{M}\\ \lfloor \dfrac{Ak-B}{M}\rfloor&\le\lfloor\dfrac{(A-1)k+(B-1)}{M}\rfloor \end{aligned} \]

因为 \(k-1<M\),所以 \((\lfloor \dfrac{Ak-B}{M}\rfloor-\lfloor\dfrac{(A-1)k+(B-1)}{M}\rfloor)\in\{0,1\}\),所以答案就是该式取 \(0\) 的个数。用类欧几里得算法分别算出两部分在 \(k\in[0,n)\) 时的值之和,相减即可。

posted @ 2026-02-01 10:04  XiaoZi_qwq  阅读(3)  评论(0)    收藏  举报