CF914C.Travelling Salesman and Special Numbers

普及+/提高

通过率:0%

时间限制:1.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

The Travelling Salesman spends a lot of time travelling so he tends to get bored. To pass time, he likes to perform operations on numbers. One such operation is to take a positive integer x and reduce it to the number of bits set to 1 in the binary representation of x. For example for number 13 it's true that 1310 = 11012, so it has 3 bits set and 13 will be reduced to 3 in one operation.

He calls a number special if the minimum number of operations to reduce it to 1 is k.

He wants to find out how many special numbers exist which are not greater than n. Please help the Travelling Salesman, as he is about to reach his destination!

Since the answer can be large, output it modulo 109 + 7.

旅行商花费大量时间旅行,因此常常感到无聊。为了消磨时间,他喜欢对数字执行一些运算。其中一种运算是:取一个正整数 xx,将其变为 xx 的二进制表示中值为 1 的比特位的个数。例如,对于数字 1313,有 1310=1101213_{10} = 1101_2,其二进制表示中有 33 个比特位为 11,因此经过一次该运算后,1313 将变为 33。

他将一个数称为特殊数,当且仅当将其减少至 11 所需的最少运算次数恰好为 kk。

他希望找出所有不超过 nn 的特殊数的个数。请帮助这位旅行商,因为他即将抵达目的地!

由于答案可能很大,请将结果对 109+710^9 + 7 取模后输出。

输入格式

The first line contains integer n (1 ≤ n < 21000).

The second line contains integer k (0 ≤ k ≤ 1000).

Note that n is given in its binary representation without any leading zeros.

第一行包含一个整数 nn(1 ≤ n < 210001 \leq n < 2^{1000})。

第二行包含一个整数 kk(0 ≤ k ≤ 10000 \leq k \leq 1000)。

注意:nn 以二进制形式给出,且不含前导零。

输出格式

Output a single integer — the number of special numbers not greater than n, modulo 109 + 7.

输出一个整数——不大于 nn 的特殊数字的个数,对 109+710^9 + 7 取模。

输入输出样例

  • 输入#1

    110
    2

    输出#1

    3
  • 输入#2

    111111011
    2

    输出#2

    169

说明/提示

In the first sample, the three special numbers are 3, 5 and 6. They get reduced to 2 in one operation (since there are two set bits in each of 3, 5 and 6) and then to 1 in one more operation (since there is only one set bit in 2).

在第一个样例中,三个特殊数字是 3、5 和 6。它们均在一次操作中被减少为 2(因为 3、5 和 6 的二进制表示中均恰好有两个置位比特),然后在另一次操作中被进一步减少为 1(因为 2 的二进制表示中仅有一个置位比特)。

输入解题思路,AI测评打分。不知道怎么写?

首页