【问题标题】:Google code jam: Cookie cutter谷歌代码堵塞:千篇一律
【发布时间】:2014-04-13 02:05:07
【问题描述】:

对于千篇一律的问题是否有封闭形式的解决方案?作为参考,这是:google page

*更新为包含问题陈述

问题

在这个问题中,你从 0 个 cookie 开始。通过单击一个巨大的 cookie,您以每秒 2 个 cookie 的速度获得 cookie。只要你有至少 C 个饼干,你就可以买一个饼干农场。每次你购买一个 cookie 农场,它会花费你 C cookie,并且每秒给你额外的 F cookie。

一旦你有 X 块没有花在农场上的 cookie,你就赢了!弄清楚如果您使用最佳策略,您需要多长时间才能获胜。

例子

假设 C=500.0、F=4.0 和 X=2000.0。以下是最佳策略的实施方式:

您从 0 个 cookie 开始,但每秒产生 2 个 cookie。 250 秒后,您将拥有 C=500 饼干,并且可以购买每秒生产 F=4 饼干的农场。 购买农场后,您有 0 个 cookie,您的 cookie 总产量为每秒 6 个 cookie。 下一个农场将花费 500 个饼干,您可以在大约 83.3333333 秒后购买。 购买第二个农场后,您有 0 个 cookie,您的 cookie 总产量为每秒 10 个 cookie。 另一个农场将花费 500 块饼干,您可以在 50 秒后购买。 购买第三个农场后,您有 0 个 cookie,您的 cookie 总产量为每秒 14 个 cookie。 另一个农场需要 500 个 cookie,但实际上不买它是有意义的:相反,您可以等到有 X=2000 个 cookie,这大约需要 142.8571429 秒。

总时间:250 + 83.3333333 + 50 + 142.8571429 = 526.1904762 秒。

请注意,您会连续获得 cookie:因此游戏开始后 0.1 秒您将获得 0.2 个 cookie,游戏开始后 π 秒您将获得 2π cookie。

【问题讨论】:

    标签: algorithm google-code cookiecutter


    【解决方案1】:

    没有。它不会有任何封闭形式。

    算法是这样的,

    等待收集 C 多个 cookie。 如果您有 C 多块饼干,请购买一个新农场

     (X-C)/R >= X/(R+F) --- (i)
    

    否则不要购买任何农场并继续收集饼干,直到你有 X 多个饼干。

    eqn (i)
    LHS is the time for the collecting (X-C) many cookies [collected C many cookies already which I did not spend on buying a farm] with current collecting rate.
    
    RHS is the time for collecting X many cookies with the increased collecting rate.
    

    根据我们的等式,R <= F(X-C)/C

    所以答案是,

    C/2 + C/2+F + C/2+2F + C/2+3F + ... + C/2+NF + X/2+NF [2 + NF <= F(X-C)/C]
    = C(1/2 + 1/2+F + 1/2+2F + ... + 1/2+NF) + X/2+NF = A
    

    假设我们有一个封闭的形式来计算 A

    那么对于F = 1, C = 1, X = K

    我们有A = (1/2 + 1/3 + .. + 1/2+N) + X/2+N,其中2+N &lt;= (K-1)

    =&gt; (1/2 + 1/3 + .. + 1/2+N) = A - X/2+N 也会有一个封闭的形式。

    但是,级数 {1/N} 的有限和没有任何封闭形式。所以这两个都没有。

    【讨论】:

    • 我知道你要去哪里......虽然,你不能为 A 生成一个封闭的形式(我同意这是不可能的),你可以为 A + X/(k+n ) (在这种情况下 k 为 2)
    • *我的意思是,你可以为 A + X/(k+n) 构建一个 .. :)
    【解决方案2】:

    我猜有一个封闭的形式:

    请注意,您必须进行比较(因为最好尽可能购买另一个农场,或者永远不要购买另一个农场)

    (X-C)/(2+F(n-1)) with X/(2+Fn),其中 n 是农场的数量。

    因此,你只需找到n 这样就可以解决

    (X-C)/(2+F(n-1)) = X/(2+Fn).

    n=(FX-2C)/CF

    如果 n 为正数,则表示您的解是 Floor(n)。否则,n=0 是您的解决方案。

    PS:上面的“2”可以用初始生产率代替。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      • 2020-01-14
      相关资源
      最近更新 更多