2026.7.10 模拟赛
总览
\(50+45+20 \to 80+20+15\)。
T1
发现这个条件特别诡异,考虑什么样的构造具有一些特殊性。
记所有缺失的数为 \(c_1 < c_2 < \dots < c_k\),构造 \(b=[c_k,c_{k-1},\dots,c_1]\),可令 \(\text{LIS}(a) \le \text{LIS}(a+b),\text{LIS}(b+a) \le \text{LIS}(a)+1\)。如果此时 \(\text{LIS}(a+b)=\text{LIS}(b+a)\) 就结束了,否则我们假设 \(\text{LIS}(a+b)=\text{LIS}(b+a)+1\)(另一种情况可以对称处理),我们希望在尽量不改变 \(\text{LIS}(a+b)\) 的情况下增加 \(\text{LIS}(b+a)\)。
可以想到,我们 reverse 一个 \(b\) 的后缀,这样可以让 \(a\) 中 \(\text{LIS}\) 的开头接上 \(b\) 的 \(\text{LIS}\),又可以尽量不让 \(a\) 中 \(\text{LIS}\) 的末尾接上 \(b\) 的 \(\text{LIS}\)。可以证明,我们 reverse 一个最短的后缀使得 \(\text{LIS}(b+a)\) 恰好增加 \(1\),若能使得 \(\text{LIS}(a+b)\) 不变,则问题解决;否则无解。
实现上,先判掉 \(\text{LIS}(a+b)=\text{LIS}(b+a)\),若 \(\text{LIS}(a+b)>\text{LIS}(b+a)\),则倒序扫描 \(b\) 并计算此时的 LIS。钦定选择了当前扫描到的全部后缀,在 BIT 上查询 \(a\) 部分的 \(\text{LIS}\) 即可。另一种情况对称处理,时间复杂度 \(O(n \log n)\)。
T2
这个函数我们不会算,先看看能不能算这个函数。
首先当 \(n \le m\) 时 \(J_m(n)=1\)。
我们来看看 \(n>m\) 时会发生什么。首先编号为 \(1\) 的人会留下,\(2 \sim m\) 的人被干掉,\(1\) 被扔到了报数队列的末尾。这个时候我们可以将一个规模为 \(n\) 的游戏规约到一个规模为 \(n-m+1\) 的游戏。若 \(J_m(n-m+1)=n-m+1\),说明是最后一个人赢了,即我们刚加入的 \(1\);否则由于我们前面少了 \(m\) 个人,赢的人为 \(J_{m}(n-m+1)+m\)。
综上,我们得到了:
现在观察递推式,发现 \(J_{m}(n)\) 仅依赖于 \(J_{m}(n-m+1)\)。将函数 \(J_m\) 按照 \(\bmod m-1\) 分类,观察 \(J_m(x),J_m(x+m-1),\dots,J_m(x+k(m-1))\)。发现每次下标 \(+(m-1)\),函数值 \(+m\),每次函数值与下标的差值 \(-1\),当差值为 \(0\) 时下一个函数值重置为 \(1\)。
那么自然想到根据 \(J_m(x)=1\) 的位置将其分为若干段。假设 \(J_m(x)=1\),看下一个下标 \(x'\) 满足 \(J_m(x')=1\) 在什么位置。长度为 \(k\),那么有 \(J_m(x+k(m-1))=km+1\),取 \(k=x-1\) 时有 \(J_m(x+(x-1)(m-1))=(x-1)m+1=x+x(m-1)\),因此 \(x'=x+x(m-1)=xm\)。故所有 \(J_m(x)=1\) 的位置形如 \(pm^{\alpha}\),而这至多只有 \(O(\log V)\) 个。
这个时候已经差不多能做了。先将答案差分为前缀和,假设需要求出 \(\sum\limits_{i=1}^n J_m(i)\)。我们枚举断点中的 \(\alpha\)。此时不能枚举 \(p\),考虑将有贡献的 \(p\) 分为两类计算:
-
\([pm^{\alpha},pm^{\alpha+1}-m+1]\) 完全包含在所需计算的前缀中;
-
\([pm^{\alpha},pm^{\alpha+1}-m+1]\) 的部分前缀包含在所需计算的前缀中。
记段的左端点 \(l=pm^{\alpha}\)。该段有贡献至少需要开始,即 \(l \le n\);完全包含在 \([1,n]\) 中需要右端点 \(lm-d \le n\)。此外还有 \(2 \le p \le m\)。整理后得到两类 \(p\) 的条件如下:
-
第一类:\(p \le \min(m,\lfloor \dfrac{n}{m^{\alpha}} \rfloor,\lfloor \dfrac{n+m-1}{m^{\alpha+1}} \rfloor)\);
-
第二类:\(\max(2,\lfloor \dfrac{n+m-1}{m^{\alpha+1}} \rfloor) \le p \le \min(m,\lfloor \dfrac{n}{m^{\alpha}} \rfloor)\)。
先计算第一类的贡献。对于一个单独的起始下标为 \(l\) 的段,贡献为 \(f(l)=\sum\limits_{i=0}^{l-1} im+1 = l+\dfrac{ml(l-1)}{2}\)。我们现在需要计算:
于是只需求出 \(\sum i\) 与 \(\sum i^2\),可以做到 \(O(1)\)。
接着考虑第二类的贡献。我们先计算出段 \(l\) 在何时被 \(n\) 截断,即计算最大整数 \(q_p\) 满足 \(l+q_p(m-1) \le n\)。容易得出 \(q_p=\lfloor \dfrac{n-l}{m-1} \rfloor\)。只计算单段的和,形式同上,为 \(g(q_p)=\sum\limits_{i=0}^{q_p} im+1 = q_p+1+\dfrac{mq_p(q_p+1)}{2}\)。
但是此时的 \(q_p\) 显然不像第一类那样有较好的形式,尝试能否将 \(q_p=\lfloor \dfrac{n-l}{m-1} \rfloor = \lfloor \dfrac{n-pm^{\alpha}}{m-1} \rfloor\) 变形成为一个更便于计算的形式。
将 \(m^{\alpha}\) 写成 \(a(m-1)+1\),\(n\) 写成 \(b(m-1)+r\),那么 \(q_p=\lfloor \dfrac{b(m-1)+r-p[a(m-1)+1]}{m-1} \rfloor = b-pa+\lfloor \dfrac{r-p}{m-1} \rfloor\)。
由于 \(2 \le b \le m\),最后一项的取值只有 \(O(1)\) 种。记其值为 \(val\),稍微讨论一下:
-
当 \(r=0\) 时有 \(val=\begin{cases} -1 & 2 \le b < m \\\ -2 & b = m \end{cases}\);
-
当 \(r=1\) 时有 \(val=-1\);
-
当 \(r \ge 2\) 时有 \(val=\begin{cases} 0 & 2 \le b \le r \\\ -1 & r < b \le m \end{cases}\)。
于是按照 \(val\) 分段考虑,每一段中均有 \(q_p=b'-pa\)。根据 \(g(q_p)\) 的式子,我们仍只需求出 \(\sum q_p\) 与 \(\sum q_p^2\)。假设我们有 \(p\) 的范围取 \([L,R]\),设 \(S_1 = \sum\limits_{i=L}^R i\),\(S_2 = \sum\limits_{i=L}^R i^2\),那么有:
-
\(\sum\limits_{p=L}^R q_p = \sum\limits_{p=L}^R b'-pa = (R-L+1)b - aS_1\);
-
\(\sum\limits_{p=L}^R q_p^2 = \sum\limits_{p=L}^R (b'-pa)^2 = \sum\limits_{p=L}^R b'^2-2b'pa+p^2a^2 = (R-L+1)b'^2-2b'aS_1+a^2S_2\)。
可以 \(O(1)\) 计算。
综上,我们只需枚举所有的 \(m^{\alpha}\) 即可完成计算,时间复杂度为 \(O(T \log V)\)。
T3
考虑一个暴力,令 \(f_{x,y}\) 表示能否走到 \((x,y)\) 这个点,转移显然。
不难发现每次转移可以写成一个矩阵。发现每走一步 \(x+y\) 的值恰好增加 \(1\),那么修改状态为 \(f_{i,x}\) 表示能否走到 \((x,i-x)\),令 \(M_{p,c}\) 代表下一个匹配的字符为 \(c\),当前在 \(f_p\),转移到 \(f_{p+1}\) 的转移矩阵。那么每次只需要右乘一个矩阵即可完成转移。
但是问题是,矩阵是会随着我们的查询字符改变的,因此我们需要考虑如何固定这个查询的字符。
既然要固定字符,肯定需要用字符矩阵内的某些字符作为参照。设当前匹配到了 \(s_k\),当且最上方的可达行为 \(x\),状态为 \(f_p\),那么我们将 \(s_k\) 以后的部分和字符矩阵第 \(x\) 行(记为 \(T_x\))第 \(p-x\) 个字符以后的部分二分哈希求一个 \(\text{lcp}\),记其长度为 \(l\),则 \((x,p-x) \sim (x,p-x+l-1)\) 这个区间内一定是可达的。此时,我们对于 \(1 \le i \le l\) 均有 \(s_{k+i-1} = T_{x,p-x+i-1}\)。这告诉我们,我们可以直接拿 \(M_{p+1,T_{x,p-x+1}} \sim M_{p+l-1,T_{x,p-x+l-1}}\) 作为下一段的转移矩阵。
转移完一段后,暴力转移一次,然后最上方可达行会严格增加。这样的过程至多只会重复 \(n\) 次,于是拿 \(n\) 个猫树维护区间矩阵积并对矩阵压位可以做到 \(O(L+n^2m \log m+qn(n+\log L))\) 的复杂度。

浙公网安备 33010602011771号