闲话 23.3.25

闲话

我看看今天要写什么杂题……
感谢 APJ 老师的杂题!\APJ/\APJ/\APJ/\APJ/

模拟赛

GDKOI2023 Day2。感谢神秘题(咬牙)。

T1
思路不难。三个点间的路径肯定交于一点 \(s\),我们可以解方程找到 \(s\to u/v/w\) 的长度。
首先对每个点找到前三长的不交链,这个是经典问题,我们可以 \(O(n)\) 地换根 dp 或 \(O(n\log n)\) 线段树。
随后我们需要对每个询问找到是否存在可行的 \(s\)。这是经典三维偏序问题,可以转成二维偏序,排序后用树状数组维护前缀最小值即可。
找到后只需要树上倍增找到 \(u,v,w\) 即可。总时间复杂度 \(O(n\log n)\)
Submission.

T2
神秘题。设 \(V = 2^{n} - 1\)
首先纯暴力的复杂度是 \(O(K2^{2n})\) 的。可以发现这个过程能用 FWT 优化,因此做到 \(O(K2^nn)\)。考场上都能推到这里。
题解说答案数组存在线性递推。设转移 \(i\) 次后对 \(x\) 的答案是 \(f(i, x)\),可以发现 \(f(i)\) 视为一个序列时每位都存在线性递推,即若 \(f(i, x)\) 组成向量 \(\bm f_i\),有 \(f_i = \sum_{j = 1}^m a_j\times \bm f_{i - j}\)
这个 \(a_j\) 可以用 BM 算出来。具体地,我们设 \(f'_i = \sum_{j = 0}^{V} r_j f(i, j)\),其中 \(r_j\) 是个随机数,则 \(f'_i\) 也存在线性递推,和 \(\bm f_i\) 相同。这就是哈希了一下。\(m = O(n)\),所以我们可以朴素预处理前 \(O(n)\)\(f(i)\),复杂度是 \(O(n^2 2^n)\) 的。实际上 \(m\) 约为 \(80\)
因为长度很短,可以随便用什么方法(Fiduccia 甚至矩阵快速幂)算出前 \(m\) 项值贡献的系数,随后对 \(V\) 个值求一下递推即可。
Submission.

T3
不算太神秘的题。下面的东西都是考场上写的。(调整了格式)
不离线可能没法做,我们考虑离线,这样先 dfs 维护完子树内信息,再静态查询。
考虑用长剖合并子树 \(k\) 深度内信息;位运算考虑拆位。
\(g(b, \text{id})\) 表示 \(u\) 在长剖数组内的位置是 \(\text{id}\)\(g(b, \text{id} + k)\) 表示 \(u\) 子树内小于等于 \(k\) 深度的所有点对应的答案在 \(2^b\) 项系数;
\(f(b, \text{id}, 0/1)\) 的定义类似,是 \(\sum v\)\(2^b\) 项系数。

首先考虑统计答案。假设本节点在长剖数组里的位置是 \(\text{id}\),我们按位统计:

  1. 如果这一位 \(b\) 高于 \(\log_2(最大深度)\),发现这位不可能被进位,直接统计 \((f(b, \text{id}, 1) - f(b, \text{id}, 0)) \times 2^b\) 即可。
  2. 如果 \(k > 最大深度\) 直接统计 \(g(b, \text{id}) \times 2^b\) 即可。
  3. 反之我们需要做进位,先剥离 \(k\) 的低 \(i\) 位和剩下的部分;记低 \(i\) 位是 \(\text{lbit}\),剩下的部分是 \(\text{hbit}\),答案首先统计 \((g(b, w) - g(b, w + \text{hbit})) \times 2^b\)
    然后是 \(\text{lbit}\),我们发现它进位的部分只可能是一个后缀。考虑这个后缀的形态:
    如果这个后缀的最高位没到 \(b\) 位,那退化成 1.;
    反之这个后缀的长度一定是 \(2^b\),两次差分即可。

然后考虑计算 \(f\)\(g\)
首先我们向长儿子递归,数组是连续的,这自然合并了长儿子。然后我们不加更改地对除长链外的儿子做合并,这复杂度是 \(O(n)\) 的。这是两个同等深度的后缀和数组做合并,不需要额外计算信息。
最后对 \(f\) 数组合并进当前节点的贡献,也就是 \(f(i, \text{id}, v_u 第 i 位)\) 自增 \(1\) 并简单地维护 \(f(b, \text{id}, 0/1)\) 处的前缀和性质。
合并完子树贡献后考虑计算当前节点的答案,也就是 \(g\) 函数。
如果没有长儿子,退化成叶子:\(g(b, \text{id}) = f(b, \text{id}, 1)\)
反之类似上面地统计答案,这时的阈值是长链的长度。
如果当前位超过 \(长链长度\times 2\) 则连进位都不用考虑,直接退化成 \(f(b, \text{id}, 1)\)
反之讨论进位的范围。这里需要注意的是,最终的进位位置一定形如 111100001111...00001111,我们每次剥离最低的一段 \(1\) 作进位。
如果超过了则只需要考虑最高位的进位,我们仍然有上面的性质,即只考虑最后 \(b\) 个位置的进位。
值就是 \(f(b, \text{id}, 1) - f(b, \text{id} + 2^b, 1) + f(b, \text{id} + 2^b, 0)\),这里第二次差分不用考虑长度。
如果没超过,我们发现需要统计一段答案在 \(2^b\) 项的系数。这是递推的形式,我们要的就是 \(g(b, \text{id} + 2^{b + 1})\)
值就是 \(f(b, \text{id}, 1) - f(b, \text{id} + 2^b, 1) + f(b, \text{id} + 2^b, 0) - f(b, \text{id} + 2^{b + 1}, 0) + g(b, \text{id} + 2^{b + 1})\)
Submission.

杂题

ARC126F

给定长度为 \(n\) 的正整数序列 \(s\)。对正整数 \(r\)\(f(r)\) 表示满足以下条件的三元组 \((a,b,c)\) 的个数:

  • \(c\in[1,r],a,b\in[0,c)\)
  • \(y_i = a\times s_i + b\)\(c\)\(i\) 单调递增,即 \(\forall i, \ y_i < y_{i + 1}\)

请计算

\[\lim_{r\to \infty}\frac{f(r)}{r^3} \pmod {998244353} \]

\(2\le n\le 10^3, \ \sum s_i \le 5\times 10^5\)

盯这题好久了,一直不敢写。感谢 \(\text{A}\color{red}{\text{PJifengc}}\) 老师的细致讲解让我有勇气写这题!

\(S = \sum s_i\),记实数 \(x\) 的小数部分为 \(\{x\}\)

考虑我们要计数三个不定的元,这不太好刻画,先指定一个元。
\(g(k)\) 表示满足以下条件的三元组 \((a,b,c)\) 的个数:

  • \(c = k,a,b\in[0,c)\)
  • \(a\times s_i + b\)\(c\)\(i\) 单调递增。

可以知道 \(g\) 就是 \(f\) 的差分,即 \(f(r) = \sum_{k = 1}^r g(k)\)

能够证明极限 \(\lim\limits_{k\to \infty} \dfrac{g(k)}{k^2}\) 存在,并设它为 \(c\)。这样,我们应用 O'Stolz 定理即可说明

\[\lim_{r\to \infty} \frac{f(r)}{r^3} = \lim_{r\to \infty} \frac{f(r) - f(r - 1)}{r^3 - (r - 1)^3} = \lim_{r\to \infty} \frac{g(r)}{3r^2 + o(r^2)} = \frac{1}{3}c \]

我们接下来只需要计算 \(c\)\(c\) 的存在性将在最后给出,因为我们必须要先表示出 \(c\),随后才能按这个等价描述证明收敛性。

性质表明 \(y_i = a\times s_i + b\text{ mod } k\) 关于 \(i\) 递增。可以发现,如果我们将 \(y_i\) 除以 \(k\)\(y_i / k\) 的小数部分也关于 \(i\) 递增,这也就是 \(\left\{(a/k) s_i + (b/k)\right\}\) 关于 \(i\) 递增。由于 \(\dfrac{a}{k},\dfrac{b}{k}\in [0, 1)\),我们不妨考虑一个 \(\mathbb R^2\) 的子空间 \(D\),定义为

\[D = \{(\alpha, \beta) \in [0, 1]^2\mid \forall i, \ \alpha s_i + \beta < \alpha s_{i + 1} + \beta\} \]

这样我们又可以定义 \(g(k)\)\(D\) 的一个子空间的大小,也就是 \(g(k) = \left\lvert\left\{(a, b) \in \mathbb Z^2 \mid 0\le a, b < k, \ (a / k, b / k)\in D \right\}\right\rvert\)。由于 \(D\) 是一个有界闭集,它的大小是收敛的。我们在最后还将证明 \(c\) 收敛于 \(D\) 的大小。这里先考虑如何计算 \(c\),也就是 \(D\) 的大小,证明留在最后。

接下来不考虑 \(\left\{\alpha s_i + \beta \right\}= \left\{\alpha s_{i + 1} + \beta\right\}\),因为这对区域 \(D\) 的大小没有影响。

考虑把 \([0, 1)\) 首尾相接组成一个环,并让 \(\left\{\alpha s_i + \beta \right\}\) 作为这环上一个点。我们称 \(0,1\) 相接的位置为断点。考虑在 \(\alpha, \beta\) 变化过程中计算合法的范围。
\(\beta\) 只是平移,暂且不管,先考虑在 \(\alpha\) 变化的过程中 \(\left\{\alpha s_i\right\}\) 这些点的情况。我们设 \(f_i(\alpha)\) 为点 \(\left\{\alpha s_i\right\}\) 到点 \(\left\{\alpha s_{i + 1}\right\}\) 顺时针方向的距离,也就是 \(f_i(\alpha) = \left\{\alpha (s_{i + 1} - s_i)\right\}\)(定义 \(s_{n + 1} = s_1\))。可以发现,对一个 \(\alpha\) 存在 \(\beta\) 使得满足条件当且仅当 \(\sum_{i = 1}^n f_i(\alpha) = 1\),也就是这 \(n\) 个位置顺时针排列。

然后考虑计算 \(\beta\) 的范围。这其实就是把这 \(n\) 个顺时针排列的位置不断旋转,使得断点在 \(s_1, s_n\) 之间。这条件等价于 \(\left\{\alpha s_1 + \beta \right\} < \left\{\alpha s_n + \beta \right\}\)。因此可以知道,确定 \(\alpha\) 后,满足条件的 \(\beta\) 所组成的区间的长度为 \(\left\{(s_1 - s_n)\alpha \right\}\)。这是好算的。
当断点在两个点之间移动时,计算 \(\beta\) 的取值集合大小是简单的。\(\beta\) 所组成的区间的长度是以 \(\alpha\) 为自变量,\((s_1 - s_n)\) 为斜率的一次函数,我们只需要对它做一次积分即可。
考虑到断点的移动会跨越点,需要将最终需要做积分的函数视为分段一次函数,考虑如何计算分段点。对一个 \(i\),位置 \(\alpha\) 因为它而成为分段点当且仅当 \(\exists k, \ \alpha = \dfrac{k}{|s_{i + 1} - s_i|}\),实际意义就是这个点对应的值 \(\pm 1\)。可以发现,总共有 \(O(\sum_{i} |s_{i + 1} - s_i|)\le O(\sum_{i} s_{i + 1} + s_i) = O(S)\) 个分段点。

我们直接计算分段点并排序,相邻两个点间的积分值是好求的,因此直接写可以做到 \(O(S\log S)\) 的复杂度。

Submission.

最后我们要证明 \(c\) 收敛于区域 \(D\) 的面积。

对区域 \(D\subset \mathbb R^2\),记 \(\lambda(D)\)\(D\)勒贝格测度,即 \(D\) 的“面积”;\(D^{\circ}\)\(D\) 的内部(interior),\(\overline D\)\(D\) 的闭包(closure)。并定义关于 \(D\) 的指示函数 \(I_D\)\(I_D(x) = 1\) 当且仅当 \(x\in D\)

我们将证明的是以下结论:

\(D\subset \mathbb R^2\) 是有界集,且其边界的测度为 \(0\),即 \(\lambda(D^{\circ}) = \lambda(\overline D)\)。令 \(g(k)\) 为满足 \((a/k, b/k)\in D\) 的整数对 \((a, b)\) 的数量。有

\[\lim_{k\to\infty} \frac{g(k)}{k^2} = \lambda(D) \]

我们接下来将定义三个精度为 \(k\) 的指示集合 \(A_k, A_k^{\circ}, \overline{A}_k\)。形式化地,有

  • \(A_k = \left\{(a, b)\mid ka\in \mathbb Z, kb\in \mathbb Z, (a, b) \in D\right\}\)
    也就是上面的条件,但是倒过来统计 \((a/k, b/k)\)。容易知道 \(g(k) = |A_k|\)
  • \(A_k^{\circ} = \left\{(a, b)\mid ka\in \mathbb Z, kb\in \mathbb Z, [a, a + \frac{1}{k})\times [b, b + \frac{1}{k}) \in D^{\circ}\right\}\)
    放在二维平面上,\((a, b)\) 在集合内当且仅当其左上角一个长宽为 \(\frac{1}{k}\) 的空间均被包含在 \(D\) 的内部中。
  • \(\overline{A}_k = \left\{(a, b)\mid ka\in \mathbb Z, kb\in \mathbb Z, [a, a + \frac{1}{k})\times [b, b + \frac{1}{k}) \cap \overline D\neq \varnothing\right\}\)
    放在二维平面上,\((a, b)\) 在集合内当且仅当其左上角一个长宽为 \(\frac{1}{k}\) 的空间和 \(D\) 的闭包有交。

容易发现的是,\(A_k^{\circ} \subset A_k \subset \overline{A}_k\)

\(A_k^{\circ}\)\(\overline{A}_k\) 的定义中,我们把一个点看做了一个长宽为 \(\frac{1}{k}\) 的空间。因此,\(A_k^{\circ}\)\(\overline{A}_k\) 实际上描述的是 \(\mathbb R^2\) 的一个子空间,我们也需要再定义两个关于 \(A_k^{\circ}\)\(\overline{A}_k\) 的、指示其所对应区域的指示函数。我们定义 \(P_k^{\circ}\)\(\overline{P}_k\) 分别为 \(A_k^{\circ}\)\(\overline{A}_k\) 的类指示函数,形式化地有

  • \(P_k^{\circ}(x) = 1\) 当且仅当 \(x \in \bigcup_{(a, b) \in A_k^{\circ}} [a, a + \frac 1k] \times [b, b + \frac 1k]\)
  • \(\overline{P}_k(x) = 1\) 当且仅当 \(x \in \bigcup_{(a, b) \in \overline{A}_k} [a, a + \frac 1k] \times [b, b + \frac 1k]\)

由于 \(A_k^{\circ},\overline{A}_k\) 中每个元素实际上对应了一个大小为 \(\dfrac{1}{k^2}\) 的空间,以下的结论是不言而喻的:

\[\int_{D^{\circ}} P_k^{\circ}(p) \text dp = \frac{|A_k^{\circ}|}{k^2} \qquad \int_{\overline{D}} \overline{P}_k(p) \text dp = \frac{|\overline{A}_k|}{k^2} \]

最后的一块拼图需要存在极限。可以发现,如果精度 \(k\to \infty\),一个二维点 \((a, b)\) 所对应的空间趋向于 \(0\)。这也表明,在 \(k\to \infty\) 的过程中,类指示函数将趋近于指示函数。这也指出了以下的结论:

\[\lim_{k\to \infty} P_k^{\circ}(x) = I_{D^{\circ}}(x)\qquad \lim_{k\to \infty} \overline{P}_k(x) = I_{\overline{D}}(x) \]

由于指示函数的性质,我们很容易找到它的控制函数。因此根据勒贝格控制收敛定理,我们能得到

\[\lim_{k\to \infty} \frac{|A_k^{\circ}|}{k^2} = \lim_{k\to \infty} \int_{R^2} P_k^{\circ}(p) \text dp = \int_{R^2} \lim_{k\to \infty}P_k^{\circ}(p) \text dp = \int_{R^2} I_{D^{\circ}}(p) \text dp = \lambda(D^{\circ}) \]

同理可知

\[\lim_{k\to \infty} \frac{|\overline{A}_k|}{k^2} = \lambda(\overline{D}) \]

\(A_k^{\circ} \subset A_k \subset \overline{A}_k\)\(\lambda(D^{\circ}) = \lambda(\overline{D})\),并根据夹逼定理可知

\[\lambda(D) = \lim_{k\to \infty} \frac{|A_k|}{k^2} = \lim_{k\to \infty} \frac{g(k)}{k^2} \]

这也就完成了证明。

posted @ 2023-03-25 16:59  joke3579  阅读(129)  评论(0编辑  收藏  举报