题目 1110: 2^k进制数
题目描述:
设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数。 (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位。 (3)将r转换为2进制数q后,则q的总位数不超过w。 在这里,正整数k(1≤k≤9)和w(k〈w≤30000)是事先给定的。 问:满足上述条件的不同的r共有多少个?
设:\(k=3, w=10\)
即,r为\(2^k=8\)进制数,r的每一位对应\(k=3\)个二进制数
则:\(r=00? \quad ??? \quad ??? \quad ??? \)
可以分两种情况讨论:
- 若r只取后三位\((w//k)\)
- r取四位\((w//k+1)\)
对于第一种情况
r 的位数\(nr \in [2, w//k]\)
r 每一位的取值\(v \in [1,2^k-1]\)
r 是一个递增序列,且每一位不重复 => 组合问题(与顺序无关)
所以对于第一种情况来说,r的取值共有
\[C_{2^k-1}^{i}(2\le i \le w//k)
\]
对于第二种情况r的首位的取值范围为\((1\le x \le 2^{1(w\ mod\ k)})\)
从1开始是为了避免于第一种情况发生重复
若首位取值为\(x\)则r的后3\((w//k)\)位取值范围为\((x\le x_i\le 2^k-1)\)
即,r的取值共有
\[C_{2^k-1-j}^{w//k}(1\le j\le 2^{n\ mod\ k})
\]
结果为
\[C_{2^k-1}^{i}(2\le i \le w//k)+C_{2^k-1-j}^{w//k}(1\le j\le 2^{n\ mod\ k})
\]