- 题解
DAY14 T5 T6
- @ 2025-7-28 15:19:21
T4
设g = gcd(N, D),则标记过程会形成g条独立的链:
- 每条链的长度为N/g
- 第i条链的起始点为i (0 ≤ i < g)
- 每条链内部的标记顺序是等差数列,公差为D mod N 因此,第K次标记的位置可以表示为:
- 链编号:(K-1) % g
- 链内位置:(K-1)/g * D
最终位置 = 链编号 + 链内位置
T5
问题
给定长度为 的序列 ,对于任意连续子数组 ,定义 为将 变为回文所需的最小修改次数。要求计算所有可能的连续子数组 的 之和。
思路
- 比较对数:对于长度为 的子数组,有 对需要比较的元素。
- 修改次数:对于每一对需要比较的元素 ,如果 ,则需要至少修改其中一个元素,贡献为 1;否则贡献为 0。
- 总贡献:所有子数组的 之和等于所有子数组中不相等对称对的总数。
数学推导
-
总比较对数:
-
对于所有长度为 的子数组,每个子数组有 对需要比较的元素。
-
长度为 的子数组共有 个。
-
因此,总比较对数为: $\sum_{k=1}^n (n - k + 1) \left\lfloor \frac{k}{2} \right\rfloor$
-
可以简化为:
$\sum_{i=1}^n (n + 1 - i) \left\lfloor \frac{i}{2} \right\rfloor$
-
这是因为 从 1 到 枚举子数组的长度 ,而 是长度为 的子数组的数量。
-
-
相等对的贡献:
- 对于值 ,设其在序列中的位置为 。
- 对于任意两个位置 和 (),如果 和 在某个子数组的对称位置,则它们不需要修改,贡献为 0。
- 具体来说,对于子数组 ,如果 和 满足 和 对于某个 ,则它们是对称的。
- 这样的子数组 的数量为 。
- 因此,所有相等对的贡献为:
- 其中 枚举所有可能的值, 和 是 在序列中的位置。
-
双指针法计算相等对贡献:
- 对于每个值 ,将其位置数组 排序。
- 初始化双指针 和 。
- 当 时:
- 如果 ,则对于所有 从 到 ,有 。
- 贡献为 。
- 移动 右移。
- 否则,对于所有 从 到 ,有 。
- 贡献为 。
- 移动 左移。
- 如果 ,则对于所有 从 到 ,有 。
- 这样可以在 时间内计算一个值 的所有相等对贡献,其中 是 的出现次数。
T6
题目分析
题目要求对于所有满足条件的度数序列X(即且),计算这些序列对应的树的最大直径之和。关键点在于:
- 存在好树的条件:(树的基本性质)。
- 最大直径的公式:对于满足条件的度数序列,最大直径 = (度数≥2的顶点个数) + 1。
- 问题转化:计算所有满足条件的序列X的最大直径之和,即:
- 设S为所有满足且的序列集合。
- 则答案为:$∑_{X∈S} [ (X中≥2的元素个数) + 1 ] = |S| + N × (满足X_i≥2的序列数)$。
推导
具体步骤如下:
- 度数序列:对于一棵 个顶点的树,其度数序列 满足(每个顶点至少有一条边)且(因为树有 条边,每条边贡献两个度数)。
- 最大直径:对于给定的度数序列,树的最大直径 是,其中是度数 的顶点个数。这是因为直径路径上的非端点顶点度数至少为 2,而端点度数为 1。
- 目标表达式
我们需要计算所有满足条件的 ( X ) 的最大直径之和:
其中 是所有满足且 的序列集合,是 中 的元素个数。
3. 拆分求和
将 ( K + 1 ) 拆分为两部分:
$\sum_{X \in S} (K + 1) = \sum_{X \in S} 1 + \sum_{X \in S} K = |S| + \sum_{X \in S} K$
- 是满足条件的序列总数。
- 是所有序列中 的元素个数的总和。
4. 计算
注意到是序列 ( X ) 中 的元素个数,可以交换求和顺序:
$\sum_{X \in S} K = \sum_{X \in S} \sum_{i=1}^N [X_i \geq 2] = \sum_{i=1}^N \sum_{X \in S} [X_i \geq 2]$
其中 是指示函数,当 时为 ,否则为 。
- 对于固定的 , 是满足 的序列数。
- 由于所有 ( i ) 对称,这个值与 ( i ) 无关,因此:
$\sum_{X \in S} K = N \cdot \text{Number of } X \in S \text{ with } X_1 \geq 2$
5. 计算和满足 的序列数
-
计算:
- 这是且 的正整数解数。
- 令,则 且。
- 非负整数解数为$\binom{(N - 2) + (N - 1)}{N - 1} = \binom{2N - 3}{N - 1}$。
-
计算满足的序列数:
- 令,(),则且。
- 令,则 且。
- 非负整数解数为$\binom{(N - 3) + (N - 1)}{N - 1} = \binom{2N - 4}{N - 1}$。
6. 合并结果
将两部分代入:
$\sum_{X \in S} f(X) = |S| + N \cdot \text{Number of } X \in S \text{ with } X_1 \geq 2 = \binom{2N - 3}{N - 1} + N \cdot \binom{2N - 4}{N - 1}$
组合数学推导
- |S|的计算:将问题转化为非负整数解的个数。令,则,解数为。
- 满足X_i≥2的序列数:固定一个位置,令,则且。再令,则,解数为。
- 最终公式:答案 = 。