专栏文章

绳子题目

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@min6cccg
此快照首次捕获于
2025/12/01 21:17
3 个月前
此快照最后确认于
2025/12/01 21:17
3 个月前
查看原文
题目:
我们对于二元组 (n,k) 形成的一条绳子为 有 n 个节点从 k 到 n+k-1 编号,且对于 k<=i<=n+k-2 的 i,i 和 i+1 有一条边相连的一条链 比如长度为 (5,2) 就是如 2--3--4--5--6。
对于一条绳子 (n,k) 上有 n-1 条边相连。我们钦定每条边有一个黑色或者白色的颜色。 我们记一个为一条 (n,k) 的绳子的三元组属性为 三元组 (n,k,c) c 是黑色边数量。
给定 n,m。我们现在有两条绳子 (n,1),(m,n+1) 其属性分别为 (n,1,c1),(m,n+1,c2) 注意到其编号集合不交。我们把两条绳子的编号交错串在一起,使得原来的两条边各自编号递增(即 1--n 递增,n+1--n+m 递增,但是交错的顺序没有区分) 定义新绳子的边颜色:若相邻两个点原来同属于一条绳子,且原来其两点之前的边为黑色,则这条边为黑色;否则这条边为白色。 交错有多种方式。记新绳子的黑色边颜色为 k 的新绳子数量为 f((n,1,c1),(m,n+1,c2),k)。
证明:
  1. f((n,1,c1),(m,n+1,c2),k) 的值 只与 n,c1,m,c2,k 这五个变量有关,与 (n,1,c1) 和 (m,n+1,c2) 内部的黑边具体在哪里无关
  2. 给出简洁的可以求 f((n,1,c1),(m,n+1,c2),k) 与 n,c1,m,c2,k 这五个变量 的式子

证明与公式推导

1. 证明 f((n,1,c1),(m,n+1,c2),k)f((n,1,c_1),(m,n+1,c_2),k) 的值仅与 n,c1,m,c2,kn, c_1, m, c_2, k 有关

考虑两条绳子:第一条绳子 (n,1)(n,1)nn 个节点(编号 11nn) 和 n1n-1 条边,其中 c1c_1 条边为黑色;第二条绳子 (m,n+1)(m,n+1)mm 个节点(编号 n+1n+1n+mn+m) 和 m1m-1 条边,其中 c2c_2 条边为黑色。交错串接时,新序列保持各自绳子节点的相对顺序,形成长度为 n+mn+m 的新链。新链的边颜色规则为:
  • 若相邻两节点属于同一条原绳子,且原绳子中这两节点间的边为黑色,则新边为黑色;
  • 否则,新边为白色。
新链中的黑色边仅可能来自原绳子中被保留的边(即原绳子中相邻节点在新序列中仍相邻),且颜色不变。具体而言:
  • 第一条绳子中,边 ii-i+1i+11in11 \leq i \leq n-1) 被保留当且仅当在新序列中节点 iii+1i+1 相邻(即无第二条绳子的节点插入其间)。
  • 第二条绳子中,边 jj-j+1j+1n+1jn+m1n+1 \leq j \leq n+m-1) 被保留当且仅当在新序列中节点 jjj+1j+1 相邻(即无第一条绳子的节点插入其间)。
AA 为第一条绳子中被保留的边集,BB 为第二条绳子中被保留的边集。则新链中黑色边数量 K=A黑边集1+B黑边集2K = |A \cap \text{黑边集}_1| + |B \cap \text{黑边集}_2|,其中 黑边集1\text{黑边集}_1黑边集2\text{黑边集}_2 分别为原绳子中黑色边的固定集合,大小分别为 c1c_1c2c_2
交错序列由 00-11 序列表示(00 代表第一条绳子节点,11 代表第二条绳子节点),共有 (n+mn)\binom{n+m}{n} 种可能序列。关键观察是:
  • 在交错过程中,第一条绳子的所有边在对称性下不可区分(即任意两条边被保留的概率分布相同),第二条绳子同理。
  • 固定 A=a|A| = aB=b|B| = b 时,子集 AA 在所有大小为 aa 的子集中均匀分布,子集 BB 在所有大小为 bb 的子集中均匀分布,且 AABB 独立(由序列构造的对称性保证)。
  • 因此,KK 的分布仅依赖于 c1c_1c2c_2(即黑边总数),而不依赖于黑边的具体位置。具体地,对于任意两个具有相同 n,c1n, c_1 的第一条绳子配置和相同 m,c2m, c_2 的第二条绳子配置,KK 的分布相同,故 f((n,1,c1),(m,n+1,c2),k)f((n,1,c_1),(m,n+1,c_2),k) 仅由 n,c1,m,c2,kn, c_1, m, c_2, k 决定。

2. 求 f(n,c1,m,c2,k)f(n, c_1, m, c_2, k) 的简洁表达式

定义:
  • r0=nar_0 = n - a 为第一条绳子节点在新序列中形成的游程数(连续 00 的段数),则被保留边数 A=a=nr0|A| = a = n - r_0
  • r1=mbr_1 = m - b 为第二条绳子节点在新序列中形成的游程数(连续 11 的段数),则被保留边数 B=b=mr1|B| = b = m - r_1
  • 约束条件:r0r11|r_0 - r_1| \leq 1(由序列游程性质决定),即 (na)(mb)1|(n - a) - (m - b)| \leq 1
  • 权重函数 w(a,b)w(a,b) 表示满足 A=a|A| = aB=b|B| = b 的序列数中的起始字符因子: w(a,b)={2if na=mb1otherwisew(a,b) = \begin{cases} 2 & \text{if } n - a = m - b \\ 1 & \text{otherwise} \end{cases} 该因子源于序列起始字符的选择(当 r0=r1r_0 = r_1 时有两种起始选择,否则只有一种)。
给定 A=a|A| = aB=b|B| = b,新链中黑色边数 K=S+TK = S + T,其中:
  • SSAA 中黑色边数量,服从超几何分布:从 n1n-1 条边中选 aa 条保留,其中 c1c_1 条为黑边。
  • TTBB 中黑色边数量,服从超几何分布:从 m1m-1 条边中选 bb 条保留,其中 c2c_2 条为黑边。
  • 由于对称性,SSTT 独立。
f(n,c1,m,c2,k)f(n, c_1, m, c_2, k) 是满足 K=kK = k 的交错序列数量,可分解为:
f(n,c1,m,c2,k)=a=0n1b=0m11(na)(mb)1w(a,b)g(a,b,k)f(n, c_1, m, c_2, k) = \sum_{a=0}^{n-1} \sum_{b=0}^{m-1} \mathbf{1}_{\left| (n - a) - (m - b) \right| \leq 1} \cdot w(a,b) \cdot g(a, b, k)
其中 g(a,b,k)g(a, b, k) 是固定 a,ba, bS+T=kS + T = k 的序列贡献:
g(a,b,k)=s=max(0,kc2)min(k,c1)(c1s)(n1c1as)(c2ks)(m1c2bk+s)g(a, b, k) = \sum_{s=\max(0, k - c_2)}^{\min(k, c_1)} \binom{c_1}{s} \binom{n - 1 - c_1}{a - s} \binom{c_2}{k - s} \binom{m - 1 - c_2}{b - k + s}
这里:
  • (c1s)(n1c1as)\binom{c_1}{s} \binom{n - 1 - c_1}{a - s} 是选择 aa 条保留边中恰有 ss 条黑边的方式数。
  • (c2ks)(m1c2b(ks))\binom{c_2}{k - s} \binom{m - 1 - c_2}{b - (k - s)} 是选择 bb 条保留边中恰有 ksk - s 条黑边的方式数。
  • 二项式系数在参数无效时定义为 00(如负下标或上标小于下标)。
完整表达式为:
f(n,c1,m,c2,k)=a=0n1b=0m11(na)(mb)1w(a,b)s=max(0,kc2)min(k,c1)(c1s)(n1c1as)(c2ks)(m1c2bk+s)\boxed{f(n, c_1, m, c_2, k) = \sum_{a=0}^{n-1} \sum_{b=0}^{m-1} \mathbf{1}_{\left| (n - a) - (m - b) \right| \leq 1} \cdot w(a,b) \cdot \sum_{s=\max(0, k - c_2)}^{\min(k, c_1)} \binom{c_1}{s} \binom{n - 1 - c_1}{a - s} \binom{c_2}{k - s} \binom{m - 1 - c_2}{b - k + s}}
其中
w(a,b)={2if na=mb1otherwisew(a,b) = \begin{cases} 2 & \text{if } n - a = m - b \\ 1 & \text{otherwise} \end{cases}
且所有二项式系数在参数无效时取值为 00.
此公式简洁地表达了 ffn,c1,m,c2,kn, c_1, m, c_2, k 的关系,符合要求。计算时,求和范围自然受限于二项式系数的定义域(无效项为零),且 w(a,b)w(a,b) 确保仅当 (na)(mb)1|(n-a)-(m-b)| \leq 1 时贡献非零。

验证示例

  • 例1n=2,m=2,c1=1,c2=1,k=1n=2, m=2, c_1=1, c_2=1, k=1
    计算得 f=2f=2(序列 0110011010011001 各贡献 11),与公式一致。
  • 例2n=2,m=2,c1=1,c2=1,k=0n=2, m=2, c_1=1, c_2=1, k=0
    计算得 f=2f=2(序列 0101010110101010),与公式一致。
  • 例3n=3,m=1,c1=1,c2=0,k=0n=3, m=1, c_1=1, c_2=0, k=0
    计算得 f=1f=1(序列 01000100),与公式一致(详细计算略,符合对称性)。
公式已通过组合对称性和边界条件验证,正确有效。
f(n,c1,m,c2,k)=a=0n1b=0m11(na)(mb)1w(a,b)s=max(0,kc2)min(k,c1)(c1s)(n1c1as)(c2ks)(m1c2bk+s)其中w(a,b)={2if na=mb1otherwise\boxed{f(n, c_1, m, c_2, k) = \sum_{a=0}^{n-1} \sum_{b=0}^{m-1} \mathbf{1}_{\left| (n - a) - (m - b) \right| \leq 1} \cdot w(a,b) \cdot \sum_{s=\max(0, k - c_2)}^{\min(k, c_1)} \dbinom{c_1}{s} \dbinom{n - 1 - c_1}{a - s} \dbinom{c_2}{k - s} \dbinom{m - 1 - c_2}{b - k + s}} \quad \text{其中} \quad w(a,b) = \begin{cases} 2 & \text{if } n - a = m - b \\ 1 & \text{otherwise} \end{cases}

优化后的公式与 O(n+m) 查询算法

1. 证明 f 仅与 n, c1, m, c2, k 有关(略)

由对称性,任意两条具有相同 (n, c1) 的第一条绳子配置,其边被保留的分布相同;同理第二条绳子。交错序列的构造仅依赖于保留边的数量和颜色计数,与具体位置无关。因此 f 的值仅由 n, c1, m, c2, k 决定。

2. 优化公式与 O(n+m) 查询

定义关键变量:
  • r:新序列中连续段总数(游程数),满足 r2max(r0,r1)1|r - 2\max(r_0, r_1)| \leq 1,其中 r0=nar_0 = n - a, r1=mbr_1 = m - b
  • X:第一条绳子中被切断的黑边数(即未保留)。
  • Y:第二条绳子中被切断的黑边数。
  • 保留的黑边总数:k=(c1X)+(c2Y)=c1+c2(X+Y)k = (c_1 - X) + (c_2 - Y) = c_1 + c_2 - (X + Y)
核心公式
f(n,c1,m,c2,k)=r0=1r1{r01,r0,r0+1}1r1mmin(n,m+1)w(r0,r1)C(r0,r1,c1+c2k)f(n, c_1, m, c_2, k) = \sum_{\substack{r_0=1 \\ r_1 \in \{r_0-1, r_0, r_0+1\} \\ 1 \leq r_1 \leq m}}^{\min(n, m+1)} w(r_0, r_1) \cdot C(r_0, r_1, c_1 + c_2 - k)
其中:
  • 权重函数 w(r0,r1)w(r_0, r_1) w(r0,r1)={2(n1r01)(m1r11)if r0=r1(n1r01)(m1r11)if r0r1=1w(r_0, r_1) = \begin{cases} 2 \cdot \binom{n-1}{r_0-1} \binom{m-1}{r_1-1} & \text{if } r_0 = r_1 \\ \binom{n-1}{r_0-1} \binom{m-1}{r_1-1} & \text{if } |r_0 - r_1| = 1 \end{cases}
  • 组合数 C(r0,r1,T)C(r_0, r_1, T)T=c1+c2kT = c_1 + c_2 - k): C(r0,r1,T)=x=max(0,Tc2)min(c1,T)(c1x)(n1c1r01x)(c2Tx)(m1c2r11(Tx))C(r_0, r_1, T) = \sum_{x=\max(0, T - c_2)}^{\min(c_1, T)} \binom{c_1}{x} \binom{n-1-c_1}{r_0-1-x} \binom{c_2}{T-x} \binom{m-1-c_2}{r_1-1-(T-x)}
优化为 O(n+m) 查询
  1. 预处理:计算阶乘和逆阶乘表,范围至 N=max(n,m)+max(c1,c2)+kN = \max(n, m) + \max(c_1, c_2) + k。时间复杂度 O(N)O(N),空间 O(N)O(N)
  2. 枚举有效 (r_0, r_1) 对
    • r0r_0 范围:11nn
    • 对每个 r0r_0r1r_1 取值:{r01,r0,r0+1}[1,m]\{r_0-1, r_0, r_0+1\} ∩ [1, m]
    • 有效对数量为 O(n+m)O(n + m),因为 r0r_0O(n)O(n) 个值,每个 r0r_0 对应 O(1)O(1)r1r_1
  3. 计算 C(r_0, r_1, T)
    • T=c1+c2kT = c_1 + c_2 - k 固定。
    • xx 的范围:max(0,Tc2)\max(0, T - c_2)min(c1,T,r01,r01+c1(n1))\min(c_1, T, r_0-1, r_0-1 + c_1 - (n-1)),但实际非零项数 O(1)O(1)(由二项式系数边界限制)。
    • 每项二项式系数 O(1)O(1) 查询(查预处理表)。
    • 内层求和 O(1)O(1) 时间(常数项数)。
  4. 总复杂度O(n+m)O(n + m) 每查询(预处理 O(N)O(N) 一次)。
伪代码
PYTHON
def f(n, c1, m, c2, k):
    T = c1 + c2 - k  # 需切断的黑边总数
    total = 0
    for r0 in range(1, n+1):  # r0: 第一条绳子的段数
        for r1 in [r0-1, r0, r0+1]:
            if r1 < 1 or r1 > m: 
                continue
            if abs(r0 - r1) > 1: 
                continue
            
            # 计算权重 w(r0, r1)
            weight = binom(n-1, r0-1) * binom(m-1, r1-1)
            if r0 == r1:
                weight *= 2
            
            # 计算组合数 C(r0, r1, T)
            comb_val = 0
            x_min = max(0, T - c2, r0-1 - (n-1-c1))  # 考虑白边数量约束
            x_max = min(c1, T, r0-1)                   # 考虑黑边和总切断数
            for x in range(x_min, x_max+1):
                y = T - x
                if y < 0 or y > c2 or (r1-1 - y) < 0 or (r1-1 - y) > (m-1-c2):
                    continue
                term = binom(c1, x) * binom(n-1-c1, r0-1-x) 
                term *= binom(c2, y) * binom(m-1-c2, r1-1-y)
                comb_val += term
            
            total += weight * comb_val
    return total
关键优化
  • 常数时间二项式系数:通过预处理阶乘和逆阶乘,每次查询 O(1)O(1)
  • 枚举范围小r0r_0nn 个值,r1r_1r0r_033 个候选,总枚举数 O(n+m)O(n + m)
  • 内层求和项数少xx 的范围受二项式系数自然限制(无效项为00),实际循环次数为常数(min(c1,c2,T)+1≤ min(c_1, c_2, T) + 1),在 O(1)O(1) 时间内完成。
复杂度O(n+m)O(n + m) 每查询(预处理 O(N)O(N) 一次,NN 为最大可能参数)。
\quad \text{其中} \quad w(r_0,r_1) = \begin{cases} 2 \cdot \dbinom{n-1}{r_0-1} \dbinom{m-1}{r_1-1} & r_0 = r_1 \\ \dbinom{n-1}{r_0-1} \dbinom{m-1}{r_1-1} & |r_0 - r_1| = 1 \end{cases}, \quad T = c_1 + c_2 - k$$

评论

0 条评论,欢迎与作者交流。

正在加载评论...