K. 小徐的数学问题(进制问题)
Posted mb62d0ca5a0a625
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K. 小徐的数学问题(进制问题)相关的知识,希望对你有一定的参考价值。
题目链接
题意:
现在他给你n和k两个数,让你求从1~n中有多少数在二进制数下第k位为1.
思路: 过了之后看了下巨巨们的时间比这个快,找到权限看了下代码是挺短的,没细看。这个可能属于偏解。
首先我们从题意中提取有用的信息,虽然题意很短:
- 不大于n
- 二进制第k位为1
好知道这两点之后我们就确定了一个重要信息那就是,第k位为1这个是不能变的(题目要求)
我们可以把用二进制表示出来(用数组储存)同时得到一个二进制最高位,比较最高位与的大小,
1. 最高位与相等,那么我们首位的1要确定下来,这是题意要求的。之后就是最小于等于大于等于的枚举,这样上面两个条件都满足。所以我们就能求出结果是
2. 最高位大于,那么我们从前往后看,(就是从二进制首位到m来看)如果让前二进制位上是1那么就有两种选择可以在这位上放1,也可以放0。
(1) 如果放0那么后面就可以随便选(除了第m位,因为条件1)所以就有,(之所以是(m-1)是因为二进制是从0位开始的而我们开始计数是从1开始,第m-1位全排列就是()有一位确定就是(UVa 11645 Bits (暴力+组合数学)