892. 台阶-Nim游戏

摘要
Title: 892. 台阶-Nim游戏
Tag: 博弈论
Memory Limit: 64 MB
Time Limit: 1000 ms

Powered by:NEFU AB-IN

Link

892. 台阶-Nim游戏

  • 题意

    现在,有一个 n级台阶的楼梯,每级台阶上都有若干个石子,其中第 i级台阶上有 ai个石子(i≥1)。
    两位玩家轮流操作,每次操作可以从任意一级台阶上拿若干个石子放到下一级台阶中(不能不拿)。
    已经拿到地面上的石子不能再拿,最后无法进行操作的人视为失败。
    问如果两人都采用最优策略,先手是否必胜。

  • 思路

    移动偶数级台阶的石子是没有意义的,比如我把第二级的石头移到第一级,对方又可以把其再移动到地面上,因此这对我取胜是没有帮助的,移动了也等于没有移动,但如果我移动的是奇数级台阶上的石子,比如只有第一级有石子,我将第一级的石子移动到地面,我就赢了,所以真正影响胜负的是奇数级台阶的石子
    所以在奇数台阶上,运用Nim游戏的结论即可

  • 代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    '''
    Author: NEFU AB-IN
    Date: 2023-03-21 19:11:38
    FilePath: \Acwing\892\892.py
    LastEditTime: 2023-03-21 19:24:16
    '''
    read = lambda: map(int, input().split())
    from collections import Counter, deque
    from heapq import heappop, heappush
    from itertools import permutations

    N = int(1e3 + 10)
    INF = int(2e9)

    n = int(input())
    lst = [0] + list(read())

    ans = 0
    for i in range(1, len(lst)):
    if i & 1:
    ans ^= lst[i]

    print("Yes" if ans != 0 else "No")
使用搜索:谷歌必应百度