El significado de los problemas
para
, que tienen una serie de
número favor, con un número mínimo de composición
solución del problema
En primer lugar, no podemos simplemente juzgar este número más de 30.000
primero
, por lo
no exceda
, cuando
grande,
no es más que permanecerá
, cuando el
es pequeño, una pequeña porción puede ser sustituido por la parte más grande (
veces)
hasta el momento no es más de
Enumeramos el número, lo que resulta en
Nos descomposición binaria, obtenemos unos pocos números, pero el número no sea igual al recuento de nosotros.
¿Cómo hacerlo
en primer lugar. la
ciertamente igual
mes
, y cada uno de nosotros ponemos una
el proceso de ajuste será más de un dos, un signo menos eliminar, uno por uno, se añade cada vez, es decir, si empieza con menos bits, pero la relación entre el número total de enumeración grande, es que se puede lograr.
#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define sf(x) scanf("%d",&x)
using namespace std;
typedef long long ll;
const int maxn = 300000;
const ll mod = 1e9+7;
int n,p;
int num[maxn+100],a[maxn+100];
map<ll,int>mp;
int main(){
cin>>n>>p;
FOR(i,1,maxn){
int m=n-i*p,tmp=m;
if(m<0)break;
int num=0;
while(m){
if(m%2)num++;
m/=2;
}
if(num<=i&&i<=tmp){
cout<<i<<endl;
return 0;
}
}
puts("-1");
}