P2655【HAOI2010 Day1】计数
问题描述
你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数。比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,10200,等等。
现在给定一个数,问在这个数之前有多少个数。(注意这个数不会有前导0)。
输入格式
只有1行,为1个整数n.
输出格式
只有整数,表示N之前出现的数的个数。
样例输入
1020
样例输出
7
一位一位的讨论,从最高位开始。用cnt数组记下每个数出现的次数
如果当前位小于N的这一位,那么后面的位置可以随便放,那么方案数是$$C_{剩下的位置数}^{cnt_0}*C_{剩下的位置数-cnt_0}^{cnt_1}……$$
如果当前这一位等于N,那么讨论下一位。
于是只需要依次讨论每一位是几即可。
代码:
1 |
|