Codeforces Ronda # 596 C

El significado de los problemas

para pag pag , que tienen una serie de 2 X + pag 2 ^ x + p
número favor, con un número mínimo de composición norte norte

solución del problema

En primer lugar, no podemos simplemente juzgar este número más de 30.000
primero norte 1 mi 9 n \ leq 1E9 , por lo 2 X * k 2 ^ x * k no exceda 1 mi 9 1E9 , cuando X X grande, k k
no es más que permanecerá 1 mi 5 1E5 , cuando el X X es pequeño, una pequeña porción puede ser sustituido por la parte más grande ( 2 2 veces)
hasta el momento no es más de 3 mi 5 3E5

Enumeramos el número, lo que resulta en norte - yo * pag cortar

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 2 X 2 ^ x ciertamente igual 2 X 2 ^ x mes 2 0 2 ^ 0 , y cada uno de nosotros ponemos una 1 1 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");
}
Publicados 203 artículos originales · ganado elogios 17 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/mxYlulu/article/details/104072279
Recomendado
Clasificación