bzoj#P4428. [Nwerc2015]Debugging 调试

[Nwerc2015]Debugging 调试

题目描述

你看中的调试器将不会在这件事上帮助你。有代码可以通过多种方式在调试与正式发布的间隙发生不同的行为,当出现这种情况,我们可能不得不求助于更原始的调试方式。

所以,你和你的 printf 现在在寻求一行导致该发布版本崩溃的代码。幸运的是:增加 printf 语句到程序里,既不会制造 bug(仍然崩溃在同一原始的代码行),也没有影响执行时间(至少不显著)。 因此,即使在每行前加一个 printf 语句,运行程序,直到它崩溃,并检查最后打印行。

然而,它需要一些时间来添加每个 printf 语句到代码,并且该程序可以具有很多行。因此,把一个 printf 语句在程序的中间或许是一个更好的计划,让它运行,观察它是否在加入行前崩溃,然后继续在代码的前一或后一半寻找。
不过话又说回来,运行程序可能需要很多时间,所以时效最优的策略可能是介于两者之间。

编写计算最坏情况下的最小时间来寻找崩溃行(无论它在哪里),认为你选择最优的加 printf 语句策略。 我们在 55 小时内发布新的版本,所以这个问题十分严重,需要尽快解决。

输入格式

输入包括一行三个整数:

  • nn,代码行的数目。
  • rr,编译和运行程序直到它崩溃的时间量。
  • pp,增加单个的 printf 行所花费的时间。
    您已经运行一次程序,因此已经知道它崩溃的地方。

输出格式

输出的最坏情况使用最优策略找到崩溃行的时间。

1 100 20
0
10 10 1
19
16 1 10
44

数据规模与约定

对于 100%100 \% 的数据,1n1061 \le n \le 10^61r1091 \le r \le 10^91p1091 \le p \le 10^9