100 atcoder#ABC153D. [ABC153D] Caracal vs Monster

[ABC153D] Caracal vs Monster

题目描述

カラカルはモンスターと戦っています。

モンスターの体力は H H です。

カラカルはモンスターを 1 1 体選んで攻撃することができます。モンスターを攻撃したとき、攻撃対象のモンスターの体力に応じて、次のどちらかが起こります。

  • モンスターの体力が 1 1 なら、そのモンスターの体力は 0 0 になる
  • モンスターの体力が X > 1 X\ >\ 1 なら、そのモンスターは消滅し、体力が  X/2  \lfloor\ X/2\ \rfloor のモンスターが新たに 2 2 体現れる

 r  \lfloor\ r\ \rfloor r r を超えない最大の整数を表す)

全てのモンスターの体力を 0 0 以下にすればカラカルの勝ちです。

カラカルがモンスターに勝つまでに行う攻撃の回数の最小値を求めてください。

输入格式

入力は以下の形式で標準入力から与えられる。

H H

输出格式

カラカルがモンスターに勝つまでに行う攻撃の回数の最小値を出力せよ。

题目大意

Caracal 在打怪。
一开始,他的面前有一只怪,这个怪有 HH 点血量。
每一次,他可以选择一个怪物进行攻击,具体方式如下:

  1. 如果这只怪兽的血量为 11 ,变为 00
  2. 如果这只怪兽的血量 X>1X > 1 ,那么这只怪兽将分裂成两只,每只的血量为 X/2\lfloor X/2 \rfloor

(其中 r\lfloor r \rfloor 表示 r\le r 的整数中,最大的一个)
当所有存在的怪物血量全部 0\le 0 时,Caracal 就获胜了。
输出他在获胜之前的攻击次数。

2
3
4
7
1000000000000
1099511627775

提示

制約

  • 1  H  1012 1\ \leq\ H\ \leq\ 10^{12}
  • 入力中のすべての値は整数である。

Sample Explanation 1

モンスターを攻撃すると、元のモンスターは消滅し、体力 1 1 のモンスターが 2 2 体現れます。 この 2 2 体のモンスターをそれぞれ 1 1 回ずつ攻撃し、合計 3 3 回の攻撃で勝つことができます。