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 p (which may be positive, negative, or zero). To combine their tastes, they invented p-binary numbers of the form 2x+p, where x is a non-negative integer.
For example, some −9-binary ("minus nine" binary) numbers are: −8 (minus eight), 7 and 1015 (−8=20−9, 7=24−9, 1015=210−9).
The boys now use p-binary numbers to represent everything. They now face a problem: given a positive integer n, what's the smallest number of p-binary numbers (not necessarily distinct) they need to represent n as their sum? It may be possible that representation is impossible altogether. Help them solve this problem.
For example, if p=0 we can represent 7 as 20+21+22.
And if p=−9 we can represent 7 as one number (24−9).
Note that negative p-binary numbers are allowed to be in the sum (see the Notes section for an example).
瓦西娅喜欢任意一个形如 2x(其中 x 为非负整数)的整数,即任意一个 2 的非负整数次幂。而佩佳则非常保守,只喜欢某一个整数 p(p 可以是正数、负数或零)。为了融合彼此的喜好,他们定义了所谓的 p-进制数(p-binary numbers),其形式为 2x+p,其中 x 是一个非负整数。
例如,一些 −9-进制数(“负九”进制数)包括:−8(负八)、7 和 1015(因为 −8=20−9,7=24−9,1015=210−9)。
现在,这两个男孩用 p-进制数来表示所有事物。他们面临一个问题:给定一个正整数 n,最少需要多少个 p-进制数(允许重复使用)相加才能得到 n?也有可能根本无法表示 n。请帮助他们解决这个问题。
例如,若 p=0,我们可以将 7 表示为 20+21+22。
又如,若 p=−9,我们可以将 7 表示为单个 p-进制数 (24−9)。
注意:求和中允许出现负的 p-进制数(参见“说明”部分中的一个例子)。
输入格式
The only line contains two integers n and p (1≤n≤109, −1000≤p≤1000).
唯一一行包含两个整数 n 和 p(1≤n≤109,−1000≤p≤1000)。
输出格式
If it is impossible to represent n as the sum of any number of p-binary numbers, print a single integer −1. Otherwise, print the smallest possible number of summands.
如果无法将 n 表示为任意个 p-二进制数的和,则输出单个整数 −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
说明/提示
0-binary numbers are just regular binary powers, thus in the first sample case we can represent 24=(24+0)+(23+0).
In the second sample case, we can represent 24=(24+1)+(22+1)+(20+1).
In the third sample case, we can represent 24=(24−1)+(22−1)+(22−1)+(22−1). Note that repeated summands are allowed.
In the fourth sample case, we can represent 4=(24−7)+(21−7). Note that the second summand is negative, which is allowed.
In the fifth sample case, no representation is possible.
0-进制数即为普通的二进制幂,因此在第一个样例中,我们可以表示 24=(24+0)+(23+0)。
在第二个样例中,我们可以表示 24=(24+1)+(22+1)+(20+1)。
在第三个样例中,我们可以表示 24=(24−1)+(22−1)+(22−1)+(22−1)。注意:允许重复的加数。
在第四个样例中,我们可以表示 4=(24−7)+(21−7)。注意:第二个加数为负数,这是允许的。
在第五个样例中,不存在可行的表示方式。
输入解题思路,AI测评打分。不知道怎么写?