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

问题

给定长度为 nn 的序列 AA,对于任意连续子数组 BB,定义 f(B)f(B) 为将 BB 变为回文所需的最小修改次数。要求计算所有可能的连续子数组 BBf(B)f(B) 之和。

思路

  1. 比较对数:对于长度为 kk 的子数组,有 k2\left\lfloor \frac{k}{2} \right\rfloor 对需要比较的元素。
  2. 修改次数:对于每一对需要比较的元素 (B[i],B[j])(B[i], B[j]),如果 B[i]B[j]B[i] \neq B[j],则需要至少修改其中一个元素,贡献为 1;否则贡献为 0。
  3. 总贡献:所有子数组的 f(B)f(B) 之和等于所有子数组中不相等对称对的总数。

数学推导

  1. 总比较对数

    • 对于所有长度为 kk 的子数组,每个子数组有 k2\left\lfloor \frac{k}{2} \right\rfloor 对需要比较的元素。

    • 长度为 kk 的子数组共有 nk+1n - k + 1 个。

    • 因此,总比较对数为: $\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$

    • 这是因为 ii 从 1 到 nn 枚举子数组的长度 kk,而 nk+1n - k + 1 是长度为 kk 的子数组的数量。

  2. 相等对的贡献

    • 对于值 xx,设其在序列中的位置为 P=[p1,p2,,pm]P = [p_1, p_2, \ldots, p_m]
    • 对于任意两个位置 pip_ipjp_ji<ji < j),如果 pip_ipjp_j 在某个子数组的对称位置,则它们不需要修改,贡献为 0。
    • 具体来说,对于子数组 [l,r][l, r],如果 pip_ipjp_j 满足 pi=l+dp_i = l + dpj=rdp_j = r - d 对于某个 dd,则它们是对称的。
    • 这样的子数组 [l,r][l, r] 的数量为 min(pi,n+1pj)\min(p_i, n + 1 - p_j)
    • 因此,所有相等对的贡献为:xi<jmin(pi,n+1pj) \sum_{x} \sum_{i < j} \min(p_i, n + 1 - p_j)
    • 其中 xx 枚举所有可能的值,pip_ipjp_jxx 在序列中的位置。
  3. 双指针法计算相等对贡献

    • 对于每个值 xx,将其位置数组 PP 排序。
    • 初始化双指针 l=0l = 0r=P1r = |P| - 1
    • l<rl < r 时:
      • 如果 P[l]<n+1P[r]P[l] < n + 1 - P[r],则对于所有 jjl+1l+1rr,有 min(P[l],n+1P[j])=P[l]\min(P[l], n + 1 - P[j]) = P[l]
        • 贡献为 (rl)×P[l](r - l) \times P[l]
        • 移动 ll 右移。
      • 否则,对于所有 iillr1r-1,有 min(P[i],n+1P[r])=n+1P[r]\min(P[i], n + 1 - P[r]) = n + 1 - P[r]
        • 贡献为 (rl)×(n+1P[r])(r - l) \times (n + 1 - P[r])
        • 移动 rr 左移。
    • 这样可以在 O(m)O(m) 时间内计算一个值 xx 的所有相等对贡献,其中 mmxx 的出现次数。

T6

题目分析

题目要求对于所有满足条件的度数序列X(即Xi=2N2∑X_i = 2N-2Xi1X_i≥1),计算这些序列对应的树的最大直径之和。关键点在于:

  1. 存在好树的条件Xi=2N2∑X_i = 2N-2(树的基本性质)。
  2. 最大直径的公式:对于满足条件的度数序列XX,最大直径 = (度数≥2的顶点个数) + 1。
  3. 问题转化:计算所有满足条件的序列X的最大直径之和,即:
    • 设S为所有满足Xi=2N2∑X_i=2N-2Xi1X_i≥1的序列集合。
    • 则答案为:$∑_{X∈S} [ (X中≥2的元素个数) + 1 ] = |S| + N × (满足X_i≥2的序列数)$。

推导

具体步骤如下:

  • 度数序列X X :对于一棵NN 个顶点的树,其度数序列 X=(X1,X2,,XN)X = (X_1, X_2, \ldots, X_N) 满足Xi1X_i \geq 1(每个顶点至少有一条边)且i=1NXi=2N2\sum_{i=1}^N X_i = 2N - 2(因为树有 N1N-1 条边,每条边贡献两个度数)。
  • 最大直径:对于给定的度数序列XX ,树的最大直径 f(X)f(X) K+1K + 1,其中KK是度数2 \geq 2 的顶点个数。这是因为直径路径上的非端点顶点度数至少为 2,而端点度数为 1。
  1. 目标表达式

我们需要计算所有满足条件的 ( X ) 的最大直径之和:

XSf(X)=XS(K+1)\sum_{X \in S} f(X) = \sum_{X \in S} (K + 1)

其中 SS 是所有满足Xi=2N2 \sum X_i = 2N - 2Xi1X_i \geq 1 的序列集合,KK XX2 \geq 2 的元素个数。

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$

  • S|S|是满足条件的序列总数。
  • XSK\sum_{X \in S} K是所有序列中2\geq 2 的元素个数的总和。

4. 计算XSK \sum_{X \in S} K

注意到KK是序列 ( X ) 中 2\geq 2 的元素个数,可以交换求和顺序:

$\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]$

其中 [Xi2] [X_i \geq 2]是指示函数,当Xi2X_i \geq 2 时为 11,否则为 00

  • 对于固定的 i i XS[Xi2] \sum_{X \in S} [X_i \geq 2] 是满足 Xi2 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. 计算S|S|和满足X12X_1 \geq 2 的序列数

  • 计算S|S|

    • 这是Xi=2N2\sum X_i = 2N - 2 Xi1X_i \geq 1 的正整数解数。
    • Yi=Xi1Y_i = X_i - 1,则Yi=N2\sum Y_i = N - 2Yi0Y_i \geq 0
    • 非负整数解数为$\binom{(N - 2) + (N - 1)}{N - 1} = \binom{2N - 3}{N - 1}$。
  • 计算满足X12X_1 \geq 2 的序列数

    • Z1=X11Z_1 = X_1 - 1Zi=XiZ_i = X_ii2 i \geq 2),则Zi=2N3\sum Z_i = 2N - 3Zi1Z_i \geq 1
    • Wi=Zi1W_i = Z_i - 1,则Wi=N3\sum W_i = N - 3 Wi0W_i \geq 0
    • 非负整数解数为$\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}$

组合数学推导

  1. |S|的计算:将问题转化为非负整数解的个数。令Yi=Xi1Y_i = X_i - 1,则Yi=N2∑Y_i = N-2,解数为C(N2+N1,N1)=C(2N3,N1)C(N-2 + N-1, N-1) = C(2N-3, N-1)
  2. 满足X_i≥2的序列数:固定一个位置,令Z1=X11Zi=Xii2Z_1 = X_1 - 1,Z_i = X_i(i≥2),则Zi=2N3∑Z_i = 2N-3Zi1Z_i≥1。再令Wi=Zi1W_i = Z_i - 1,则Wi=N3∑W_i = N-3,解数为C(2N4,N1)C(2N-4, N-1)
  3. 最终公式:答案 = C(2N3,N1)+N×C(2N4,N1)C(2N-3, N-1) + N × C(2N-4, N-1)

0 条评论

目前还没有评论...