【NOIP 2006】2^k进制数(组合数+高精度)

该博客探讨了NOIP 2006年的一道题目,重点在于解决2^k进制数的最高位选择问题。通过分别计算不考虑和考虑最高位的选取方案,利用组合数公式并进行边界条件的特判,来确保解题正确性。文章还提到了使用高精度结构体实现,特别是压位版本的高精度算法,以优化空间和时间复杂度。
摘要由CSDN通过智能技术生成

传送门

读懂题意过后,我们会发现,难点就是在于最高位的选取,因为最高位的组成有w%k位,并不是简单的k位。

不过我们可以分开做,我们先算小于等于\({ {w} \over {k}}\)的选取方案,也就是说除去最高位的。相当于就是从1~\(2^k\)-1里选i个数,总方案数为

\(\sum_{i=2}^{w/k} C_{2^{k}-1}^{i}\)

如果考虑进最高位,首位的范围小于\(2^{w mod k}\),由于要使右边的数都大于它,相当于就是从剩下的\(2^k-i\)个可选取的数中再选\({ {w} \over {k}}\)个,即方案数为

\(\sum_{i=1}^{2^{w mod k}-1} C_{2^{k}-i-1}^{w/k}\)

其实上面的式子还不够完美,在写组合数公式时,往往要考虑到\(C_{a}^{b}\)中b绝对不能大于a,因此还要取个m

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值