Caracal vs Monster.


Submit solution

Points: 100 (partial)
Time limit: 2.0s
Memory limit: 128M

Author:
Problem type
Allowed languages
C, C++, Java, JS, Pascal, Python, VB

Caracal está luchando contra un monstruo. La salud del monstruo es H.

Caracal puede atacar eligiendo un monstruo. Cuando se ataca a un monstruo, dependiendo de la salud de ese monstruo, sucede lo siguiente:

  • Si la salud del monstruo es 1, disminuye a 0.
  • Si la salud del monstruo, X , es mayor que 1, ese monstruo desaparece. Luego, aparecen dos nuevos monstruos, cada uno con la salud de \lfloor X/2 \rfloor .

(\lfloor r \rfloor denota el entero más grande que no excede r.)

Caracal gana cuando la salud de todos los monstruos existentes llega a ser 0 o menos.

Encuentra el número mínimo de ataques que Caracal necesita hacer antes de ganar.

Restricciones

  • 1 \leq H \leq 10^{12}
  • Todos los valores de entrada son enteros.

Entrada

Leer la salud H del monstruo.

Salida

Encuentra el número mínimo de ataques que Caracal necesita hacer antes de ganar.

Ejemplo #1 de Entrada

2

Ejemplo #1 de Salida

3

Cuando Caracal ataca al monstruo inicial, este desaparece y aparecen dos nuevos monstruos, cada uno con la salud de 1. Luego, Caracal puede atacar a cada uno de estos nuevos monstruos una vez y ganar con un total de tres ataques.

Ejemplo #2 de Entrada

4

Ejemplo #2 de Salida

7

Ejemplo #3 de Entrada

1000000000000

Ejemplo #3 de Salida

1099511627775

Comments

There are no comments at the moment.