K. 小徐的数学问题(进制问题)

Posted mb62d0ca5a0a625

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K. 小徐的数学问题(进制问题)相关的知识,希望对你有一定的参考价值。


​题目链接​

K.


题意:

现在他给你n和k两个数,让你求从1~n中有多少数在二进制数下第k位为1.

思路: 过了之后看了下巨巨们的时间比这个快,找到权限看了下代码是挺短的,没细看。这个可能属于偏解。

首先我们从题意中提取有用的信息,虽然题意很短:

  1. 不大于n
  2. 二进制第k位为1

好知道这两点之后我们就确定了一个重要信息那就是,第k位为1这个是不能变的(题目要求)
我们可以把用二进制表示出来(用数组储存)同时得到一个二进制最高位,比较最高位与的大小,

1. 最高位与相等,那么我们首位的1要确定下来,这是题意要求的。之后就是最小于等于大于等于的枚举,这样上面两个条件都满足。所以我们就能求出结果是

2. 最高位大于,那么我们从前往后看,(就是从二进制首位到m来看)如果让前二进制位上是1那么就有两种选择可以在这位上放1,也可以放0。
(1) 如果放0那么后面就可以随便选(除了第m位,因为条件1)所以就有,(之所以是(m-1)是因为二进制是从0位开始的而我们开始计数是从1开始,第m-1位全排列就是()有一位确定就是(UVa 11645 Bits (暴力+组合数学)

Codeforces1594 F. Ideal Farm(思维,数学)

[CSP-S模拟测试]:数字(数学+高精度)

Codeforces484 A. Bits

计算一个整数二进制表示中1的个数(剑指)

codeforces1303D Fill The Bag 二进制应用and贪心