1 条题解

  • 0
    @ 2026-4-25 12:40:19

    题目理解 我们有一个点,初始在 x=0x = 0。 两人轮流移动,Sakurako 先手。 第 ii 次移动的步长是 2i12i - 1

    第 1 步(Sakurako):1-1

    第 2 步(Kosuke):+3+3

    第 3 步(Sakurako):5-5

    第 4 步(Kosuke):+7+7

    ……

    x>n|x| > n 时游戏结束。 最后一步是谁走的,就输出谁的名字。

    思路分析 我们不需要找公式,直接模拟即可。 因为 n100n \le 100,步长 2i12i - 1 增长很快,只需要很少的步数就能超出 nn

    设当前坐标 x=0x = 0,步数 ii 从 1 开始。

    如果 ii 是奇数,Sakurako 移动,xx 减少 (2i1)(2i - 1); 如果 ii 是偶数,Kosuke 移动,xx 增加 (2i1)(2i - 1)

    每次移动后检查 x>n|x| > n 是否成立,成立则上一个人获胜。

    时间复杂度 最坏情况下步数大约是 n\sqrt{n} 级别(因为移动距离是奇数累加),所以复杂度 O(n)O(\sqrt{n}) 或直接 O(n)O(n)。 这里标程说 O(n)O(n) 也是安全的,因为 n100n \le 100,实际上远小于 nn

    模拟步骤 初始化 x=0x = 0i=1i = 1

    循环:

    如果 ii 为奇数:x=x(2i1)x = x - (2i - 1)

    如果 ii 为偶数:x=x+(2i1)x = x + (2i - 1)

    检查 x>n|x| > n

    如果是,则最后移动的人是:

    ii 为奇数 \Rightarrow 刚才是 Sakurako 移动 \Rightarrow 输出 "Sakurako"

    ii 为偶数 \Rightarrow 刚才是 Kosuke 移动 \Rightarrow 输出 "Kosuke"

    否则 i=i+1i = i + 1,继续。

    • 1

    信息

    ID
    6669
    时间
    1000ms
    内存
    256MiB
    难度
    1.5
    标签
    递交数
    1
    已通过
    1
    上传者