你那高级的调试器在这种情况下帮不上忙。代码在调试版本和发布版本之间产生不同行为的情况有很多,当这种情况发生时,人们可能不得不求助于更原始的调试形式。
现在,你和你的 printf 只能靠自己去寻找导致发布版本崩溃的那一行代码了。不过你还算幸运:向程序中添加 printf 语句既不会影响 Bug(它仍然会在原来的代码行崩溃),也不会影响执行时间(至少不会有显著影响)。因此,即使是那种在每一行代码前都加上 printf 语句、运行程序直到崩溃并检查最后一行输出的朴素方法也是可行的。
然而,在代码中添加每一条 printf 语句都需要时间,而且程序可能有很多行。所以,一个更好的计划可能是在程序中间放置一条 printf 语句,让它运行,观察它是否在添加的语句之前崩溃,然后继续在代码的前半部分或后半部分进行搜索。
但话说回来,运行程序可能需要花费大量时间,因此最省时的策略可能介于两者之间。请编写一个程序,计算在选择最优策略放置 printf 语句的情况下,找到崩溃行所需的最坏情况时间(无论崩溃行在哪里)。
我们将在五小时后发布新版本,所以这个问题很紧急,需要尽快解决。
输入格式
输入包含一行三个整数:
$n$ ($1 \le n \le 10^6$),代码行数;
$r$ ($1 \le r \le 10^9$),编译并运行程序直到崩溃所需的时间;
* $p$ ($1 \le p \le 10^9$),添加单行 printf 语句所需的时间。
你已经运行过一次程序,因此已经知道它确实会在某处崩溃。
输出格式
输出使用最优策略找到崩溃行所需的最坏情况时间。
样例
样例输入 1
1 100 20
样例输出 1
0
样例输入 2
10 10 1
样例输出 2
19
样例输入 3
16 1 10
样例输出 3
44