1 条题解

  • 0
    @ 2025-8-24 22:21:16

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Push_Y
    会赢的

    搬运于2025-08-24 22:21:16,当前版本为作者最后更新于2021-09-01 14:15:59,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    建议直接观看我博客中完整的Fibonacci Nim

    显然先手可以第一次直接取完获胜,但大多数情况下这么做并不是最少的。下面我们考虑第一次不取完的情况

    齐肯多夫(Zeckendorf)定理

    Wikipedia 中对齐肯多夫定理的描述:

    任何正整数都可以表示成若干个不连续的斐波那契数之和。

    这种和式称为齐肯多夫表述法

    构造这种和式可以通过每次贪心选出最大的不超过它的斐波那契数。

    证明:

    • 若正整数 nn 为斐波那契数,得证。

    • 否则

      • 先取 Fibt1Fib_{t_1},其中 t1t1 满足 Fibt1<n<Fibt1+1Fib_{t_1} < n < Fib_{t_{1} + 1}

      • n=nFibt1n'=n - Fib_{t_1},同上一步取出一个 Fibt2Fib_{t_2} 满足 Fibt2<n<Fibt2+1Fib_{t_2} < n' < Fib_{t_{2} + 1}

      • 只要证 t1t2+1t_1 ≠ t_2 + 1。考虑反证法:

        • 假设 t1=t2+1t_1 = t_2 + 1,则第一步取出的应当是 t1+1t_1 + 1 而不是 t1t_1。原因是 Fibt1+1=Fibt1+Fibt11Fib_{t_1 + 1} = Fib_{t_1} + Fib_{t_1 - 1}

    解题

    引理 1

    如果正整数 nn 为斐波那契数,则先手必败。

    证明:

    n=Fibtn = Fib_{t},我们把 nn 看成 Fibt1Fib_{t-1}Fibt2Fib_{t-2} 两堆。

    • 若第一步取的个数超过 Fibt2Fib_{t-2},则后手可以直接取完剩余石子。

    • 否则,该问题变成了一个 n=Fibt2n' = Fib_{t-2} 的规模更小的同样的问题。

    考虑 n=2n = 2 的情况(即规模最小的情况),先手只能取 11,于是后手取 11 获胜。

    引理 2

    如果正整数 nn 不为斐波那契数,则将其用齐肯多夫表示法表示后,最小的那一堆个数即为答案。

    证明:

    n=f1+f2+...+fkn = f_1 + f_2 + ... + f_k

    先手取完最小的那一堆(即 fkf_k)后,根据齐肯多夫定理fk1>2×fkf_{k-1} > 2 \times f_k,于是后手无法一次性取完次小的那一堆。再根据引理 1,次小的一堆的最后一块石子一定还是由先手取到,于是先手一定能取到最大的那一堆的最后一块,即整堆石子的最后一块。

    • 1

    信息

    ID
    5514
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    递交数
    0
    已通过
    0
    上传者