计算剩余第n天结束时的金额

时间:2016-04-22 07:28:51

标签: algorithm math

给定a,b和n,其中一美元是每天获得的钱,b是要购买的食物的成本,n是天数。

每天“a”钱都存入您的帐户,您希望购买尽可能多的食物,并尽可能多地购买每单位食物费用b。 如果你已经有食物,那么你那天不会购买食物。你重复这个任务n天,并想计算在n天结束时留下的金额。

蛮力解决方案是模拟任务,但这不会起作用,因为天数非常高,如10 ** 9。

我想要的其他方法

  1. 如果a == b则答案为0
  2. 如果b> a,那么答案是(a * n)%b
  3. 我很难找到一个<湾

    以下是一个例子

      

    a = 5,b = 3,n = 3

         

    第1天:5美元,我们最多可以购买1份2美元的食物

         

    第2天:2天(上一天)+5美元我们最多可以购买2个食品1美元   遗体

         

    第3天:1(上一天)+5美元,我们已经不会进行任何购买了   有1种食物(从上一天开始)

         

    第3天结束时剩余6美元

1 个答案:

答案 0 :(得分:1)

我可能会误会,但每次购买的天数会呈指数增长。如果您下次获得x食物的资金,那么您将获得x*(a/b),下次您将获得x*(a/b)*(a/b)等等。

因此,如果你利用指数增长,你应该能够强制它。

如果今天你有0食物和x钱,那么你可以购买x / b食物,所以你可以跳x / b天(当你再次食用0食物)时你会有(x%b)+(x / b)*下次付钱。由于您遵循指数增长,您的复杂性将为O(logN)。如果不清楚需要a=2, b=1并且看到你很快就能获得大量资金,而且你可以轻松地跳过很多天。

有一点需要注意的是指数可能很慢。如果a和b非常接近(a=1000000 b=999999),那么a / b将非常接近1.仍然是logN但是你在慢时段花费了太多时间。在实践中,这意味着您将进行大量迭代,只需要跳过一两天。您还可以通过记录每个周期赚多少钱(在我必须购买食物的两天之间,在我的例子中它将是1)并计算需要多少周期才能购买1个单位的食物来减少这个短缺(你需要提醒一下周期后剩下的东西,把它加到你现在拥有的钱中,并除以食物的成本)。一旦你知道这一点,你可以跳过所有的周期,直到你可以买到更多的食物。