杭电多校第八场05_Separated Number(组合数前缀和性质)

Posted hesorchen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杭电多校第八场05_Separated Number(组合数前缀和性质)相关的知识,希望对你有一定的参考价值。

题目

Separated Number

给出一个数位为 n n n的数字 ( n < = 1 e 6 ) (n<=1e6) (n<=1e6),现在可以将该数字最多分成 k ( 1 < = k < = n ) k(1<=k<=n) k(1<=k<=n)段。定义一种分法的贡献为所有段的数字之和,求所有分法的贡献和。

例如对于样例,答案为 1 + 1 + 10 + 100 = 112 1+1+10+100=112 1+1+10+100=112

3
100

1|0|0 :1+0+0=1  
1|00  :1+0=1  
10|0  :10+0=10  
100   :100

比较容易想到的一种解法是对于每一位,计算它作为个位、十位… …的贡献和。

例如要对于数字 123456 123456 123456,最多可以分成 6 6 6段,要计算 3 3 3作为十位的贡献次数。 我们需要在 4 4 4后面分割一次,还剩下最多 k − 2 k-2 k2次分割机会和 n − 3 n-3 n3个可分割点,方案数显然就是 C n − 2 0 + C n − 2 1 + . . . . . . + C n − 3 k − 2 C_{n-2}^{0}+C_{n-2}^{1}+... ... +C_{n-3}^{k-2} Cn20+Cn21+......+Cn3k2

在这之前,需要先掌握组合数前缀和的知识。

递推组合数前缀和

我们先来证明以下公式

C n m = C n − 1 m − 1 + C n − 1 m C_n^m=C_{n-1}^{m-1}+C_{n-1}^{m} Cnm=Cn1m1+Cn1m

证明:

C n m = ( n ) ! ( n − m ) ! × ( m ) ! C_{n}^{m}=\\frac{(n)!}{(n-m)!\\times (m)!} Cnm=(nm)!×(m)!(n)!

C n − 1 m − 1 + C n − 1 m = ( n − 1 ) ! ( n − m ) ! × ( m − 1 ) ! + ( n − 1 ) ! ( m ) ! × ( n − m − 1 ) ! = m × ( n − 1 ) ! ( n − m ) ! × ( m ) ! + ( n − m ) × ( n − 1 ) ! ( n − m ) ! × ( m ) ! = ( n ) ! ( n − m ) ! × ( m ) ! = C n m C_{n-1}^{m-1}+C_{n-1}^{m}=\\frac{(n-1)!}{(n-m)!\\times (m-1)!}+\\frac{(n-1)!}{(m)!\\times (n-m-1)!}= \\frac{m\\times (n-1)!}{(n-m)!\\times (m)!}+\\frac{(n-m)\\times (n-1)!}{(n-m)!\\times (m)!}=\\frac{(n)!}{(n-m)!\\times (m)!}=C_{n}^{m} Cn1m1+Cn1m=(nm)!×(m1)!(n1)!+(m)!×(nm1)!(n1)!=(nm)!×(m)!m×(n1)!+(nm)!×(m)!(nm)×(n1)!=(nm)!×(m)!(n)!=Cnm

上面的公式在杨辉三角递推组合数中有所应用。

F ( n , m ) = ∑ i = 0 m C n m F(n,m)=\\sum_{i=0}^{m}C_n^m F(n,m)=i=0mCnm,可以发现,这在杨辉三角中体现为某一列的前缀和。

有以下两个递推式:

F ( n , m ) = F ( n , m − 1 ) + C ( n , m ) F(n,m)=F(n,m-1)+C(n,m) F(n,m)=F(n,m1)+C(n,m)

F ( n , m ) = 2 × F ( n − 1 , m ) − C ( n − 1 , m ) F(n,m)=2\\times F(n-1,m)-C(n-1,m) F(n,m)=2×F(n1,m)C(n1,m)

第一个公式很显然,前缀和的性质,也就是杨辉三角某一行前 m − 1 m-1 m1个数的和再加上第 m m m个数,显然就是前 m m m个数的和。

第二个公式也不难,回想一下杨辉三角递推组合数的方式,除了最后一个数,其他数都被加了两遍。

好了, 到这为止,我们已经掌握了递推组合数前缀和。

解题

考虑算每一位对答案产生的贡献,假设这一位为 d ( 0 < = d < = 9 ) d(0<=d<=9) d(0<=d<=9),那么他能产生的贡献就是 d × 1 0 j × n u m d \\times 10^j \\times num d×10j×num,其中, n u m num num为让 d d d产生 1 0 j 10^j 10j的位权的分法总方案数。

要使 d d d产生 1 0 j 10^j 10j的位权,记 d d d的下标为 i i i,那么我们应在第 i + j i+j i+j位后面进行一次分割,剩下的分割点和分割次数就会产生若干方案数。

i + j i+j i+j分三种情况讨论:

  1. i + j > n i+j>n i+j>n,不合法的方案,无贡献。
  2. i + j = n i+j=n i+j=n,合法的方案, i + j i+j i航电多校第八场-A-Character Encoding

    [补]2019HDU杭电多校第一场A

    2019杭电多校第九场

    2020杭电多校第2场

    2020杭电多校第三场题解

    2020杭电多校第三场