11344. Каракал проти монстра


Відправити розв'язок

Бали: 100
Time limit: 2.0s
Memory limit: 500M

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

Каракал бореться з монстром. Здоров'я монстра - \(H\). Каракал може атакувати, вибравши одного монстра. Коли на монстра атакують, залежно від здоров’я цього монстра, відбувається наступне:

  • якщо здоров’я монстра дорівнює 1, воно знижується до 0.

  • Якщо здоров’я монстра, \(X\), більше 1, цей монстр зникає. Потім з’являються два нових монстра, кожен із здоров’ям \(\lfloor X/2 \rfloor\) (\(\lfloor r \rfloor\) позначає найбільше ціле число, що не перевищує r.)

Каракал перемагає, коли здоров'я всіх існуючих монстрів стає 0 або нижче.

Знайдіть мінімальну кількість атак, яку потрібно зробити каракалу для перемоги.

Формат вхідних даних

Вхідний потік містить ціле число \(H\) (\(1 \le N \le 10^{12}\))

Формат вихідних даних

У вихідний потік виведіть мінімальну кількість атак.

Примітка

До прикладу 1:

Коли каракал атакує першого монстра, він зникає, і з’являються два монстра, кожен із здоров’ям 1.

Тоді каракал може атакувати кожного з цих нових монстрів один раз і виграти загалом трьома атаками.

Приклад вхідних даних

2

Приклад вихідних даних

3

Приклад вхідних даних

4

Приклад вихідних даних

7

Приклад вхідних даних

1000000000000

Приклад вихідних даних

1099511627775

Коментарі

Ще немає коментарів.