杭电多校第八场05_Separated Number(组合数前缀和性质)
Posted hesorchen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杭电多校第八场05_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 k−2次分割机会和 n − 3 n-3 n−3个可分割点,方案数显然就是 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} Cn−20+Cn−21+......+Cn−3k−2。
在这之前,需要先掌握组合数前缀和的知识。
递推组合数前缀和
我们先来证明以下公式
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=Cn−1m−1+Cn−1m
证明:
C n m = ( n ) ! ( n − m ) ! × ( m ) ! C_{n}^{m}=\\frac{(n)!}{(n-m)!\\times (m)!} Cnm=(n−m)!×(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} Cn−1m−1+Cn−1m=(n−m)!×(m−1)!(n−1)!+(m)!×(n−m−1)!(n−1)!=(n−m)!×(m)!m×(n−1)!+(n−m)!×(m)!(n−m)×(n−1)!=(n−m)!×(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,m−1)+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(n−1,m)−C(n−1,m)
第一个公式很显然,前缀和的性质,也就是杨辉三角某一行前 m − 1 m-1 m−1个数的和再加上第 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分三种情况讨论:
- i + j > n i+j>n i+j>n,不合法的方案,无贡献。
- i + j = n i+j=n i+j=n,合法的方案, i + j i+j i航电多校第八场-A-Character Encoding