CF1225C.p-binary

普及/提高-

通过率:0%

时间限制:2.00s

内存限制:512MB

AC君温馨提醒

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

题目描述

Vasya will fancy any number as long as it is an integer power of two. Petya, on the other hand, is very conservative and only likes a single integer pp (which may be positive, negative, or zero). To combine their tastes, they invented pp-binary numbers of the form 2x+p2^x + p, where xx is a non-negative integer.

For example, some −9-9-binary ("minus nine" binary) numbers are: −8-8 (minus eight), 77 and 10151015 (−8=20−9-8=2^0-9, 7=24−97=2^4-9, 1015=210−91015=2^{10}-9).

The boys now use pp-binary numbers to represent everything. They now face a problem: given a positive integer nn, what's the smallest number of pp-binary numbers (not necessarily distinct) they need to represent nn as their sum? It may be possible that representation is impossible altogether. Help them solve this problem.

For example, if p=0p=0 we can represent 77 as 20+21+222^0 + 2^1 + 2^2.

And if p=−9p=-9 we can represent 77 as one number (24−9)(2^4-9).

Note that negative pp-binary numbers are allowed to be in the sum (see the Notes section for an example).

瓦西娅喜欢任意一个形如 2x2^x(其中 xx 为非负整数)的整数,即任意一个 2 的非负整数次幂。而佩佳则非常保守,只喜欢某一个整数 pp(pp 可以是正数、负数或零)。为了融合彼此的喜好,他们定义了所谓的 pp-进制数(pp-binary numbers),其形式为 2x+p2^x + p,其中 xx 是一个非负整数。

例如,一些 −9-9-进制数(“负九”进制数)包括:−8-8(负八)、77 和 10151015(因为 −8=20−9-8 = 2^0 - 9,7=24−97 = 2^4 - 9,1015=210−91015 = 2^{10} - 9)。

现在,这两个男孩用 pp-进制数来表示所有事物。他们面临一个问题:给定一个正整数 nn,最少需要多少个 pp-进制数(允许重复使用)相加才能得到 nn?也有可能根本无法表示 nn。请帮助他们解决这个问题。

例如,若 p=0p = 0,我们可以将 77 表示为 20+21+222^0 + 2^1 + 2^2。

又如,若 p=−9p = -9,我们可以将 77 表示为单个 pp-进制数 (24−9)(2^4 - 9)。

注意:求和中允许出现负的 pp-进制数(参见“说明”部分中的一个例子)。

输入格式

The only line contains two integers nn and pp (1≤n≤1091 \leq n \leq 10^9, −1000≤p≤1000-1000 \leq p \leq 1000).

唯一一行包含两个整数 nn 和 pp(1≤n≤1091 \leq n \leq 10^9,−1000≤p≤1000-1000 \leq p \leq 1000)。

输出格式

If it is impossible to represent nn as the sum of any number of pp-binary numbers, print a single integer −1-1. Otherwise, print the smallest possible number of summands.

如果无法将 nn 表示为任意个 pp-二进制数的和,则输出单个整数 −1-1;否则,输出可能的最小加数个数。

输入输出样例

  • 输入#1

    24 0

    输出#1

    2
  • 输入#2

    24 1

    输出#2

    3
  • 输入#3

    24 -1

    输出#3

    4
  • 输入#4

    4 -7

    输出#4

    2
  • 输入#5

    1 1

    输出#5

    -1

说明/提示

00-binary numbers are just regular binary powers, thus in the first sample case we can represent 24=(24+0)+(23+0)24 = (2^4 + 0) + (2^3 + 0).

In the second sample case, we can represent 24=(24+1)+(22+1)+(20+1)24 = (2^4 + 1) + (2^2 + 1) + (2^0 + 1).

In the third sample case, we can represent 24=(24−1)+(22−1)+(22−1)+(22−1)24 = (2^4 - 1) + (2^2 - 1) + (2^2 - 1) + (2^2 - 1). Note that repeated summands are allowed.

In the fourth sample case, we can represent 4=(24−7)+(21−7)4 = (2^4 - 7) + (2^1 - 7). Note that the second summand is negative, which is allowed.

In the fifth sample case, no representation is possible.

00-进制数即为普通的二进制幂,因此在第一个样例中,我们可以表示 24=(24+0)+(23+0)24 = (2^4 + 0) + (2^3 + 0)。

在第二个样例中,我们可以表示 24=(24+1)+(22+1)+(20+1)24 = (2^4 + 1) + (2^2 + 1) + (2^0 + 1)。

在第三个样例中,我们可以表示 24=(24−1)+(22−1)+(22−1)+(22−1)24 = (2^4 - 1) + (2^2 - 1) + (2^2 - 1) + (2^2 - 1)。注意:允许重复的加数。

在第四个样例中,我们可以表示 4=(24−7)+(21−7)4 = (2^4 - 7) + (2^1 - 7)。注意:第二个加数为负数,这是允许的。

在第五个样例中,不存在可行的表示方式。

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

首页