#ABC153D. Caracal vs Monster

Caracal vs Monster

题目描述

Caracal is fighting with a monster.

The health of the monster is HH.

Caracal can attack by choosing one monster. When a monster is attacked, depending on that monster's health, the following happens:

  • If the monster's health is 11, it drops to 00.
  • If the monster's health, XX, is greater than 11, that monster disappears. Then, two new monsters appear, each with the health of X/2\lfloor X/2 \rfloor.

(r\lfloor r \rfloor denotes the greatest integer not exceeding rr.)

Caracal wins when the healths of all existing monsters become 00 or below.

Find the minimum number of attacks Caracal needs to make before winning.

狞猫正在和一只怪物战斗。

怪物的 health 值是 HH

狞猫可以选择一个怪物进行攻击。当怪物受到攻击时,根据怪物的健康状况,会发生以下情况:

  • 如果怪物的生命值是 11 ,它的生命值会下降到 00
  • 如果怪物的生命值 XX 大于 11 ,则怪物消失。然后,会出现两个新的怪物,每个怪物的生命值都是 X/2\lfloor X/2 \rfloor

r\lfloor r \rfloor 表示不超过 rr 的最大整数)。

当所有现有怪物的健康值变为 00 或更低时,狞猫获胜。

求 Caracal 在获胜前最少需要攻击的次数。

输入格式

输入内容按以下格式标准输入:

HH

输出格式

找出狞猫在获胜前需要发动的最少攻击次数。

样例 #1

样例输入 #1

2

样例输出 #1

3

样例 #2

样例输入 #2

4

样例输出 #2

7

样例 #3

样例输入 #3

1000000000000

样例输出 #3

1099511627775

说明

数据规模与约定

  • 1H10121 \leq H \leq 10^{12}
  • 所有输入值均为整数。

样例 11 解释

当狞猫攻击初始怪物时,它消失了,同时出现了两个怪物,每个怪物的健康值都是 11

然后,狞猫可以攻击这些新怪物各一次,总共攻击三次即可获胜。