zoukankan      html  css  js  c++  java
  • nim博弈

    原题链接 :https://www.acwing.com/problem/content/893/

    给定nn堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。

    问如果两人都采用最优策略,先手是否必胜。

    输入格式

    第一行包含整数nn。

    第二行包含nn个数字,其中第 ii 个数字表示第 ii 堆石子的数量。

    输出格式

    如果先手方必胜,则输出“Yes”。

    否则,输出“No”。

    数据范围

    1n1051≤n≤105,
    11091≤每堆石子数≤109

    输入样例:

    2
    2 3
    

    输出样例:

    Yes


    nim 博弈,是简单博弈也是我对博弈学习的开始

    这类博弈可以看成 两种状态 :
    1. 先手必胜:当所有值得异或值不等于零时,先手一定可以经过某种操作变成零,后手又会把零变成非零,最后险收益指不是零,后手会遇到最后的零
    2. 先手必败:反过来当所有值得异或值等于零时,先手都会使零变成非零,后手始终是将非零变成零,后手必胜

    代码:

     1 #include <iostream>
     2 #include <string>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <cmath>
     6 
     7 using namespace std;
     8 
     9 int main()
    10 {
    11     int n;
    12     cin >>n;
    13     int res=0;
    14     while(n--)
    15     {
    16         int x;
    17         cin >> x;
    18         res = res^x;
    19     }
    20     if(res)puts("Yes");
    21     else puts("No");
    22     return 0;
    23 }
    View Code
    你的脸上风淡云轻,谁也不知道你的牙咬得有多紧。你走路带着风,谁也不知道你膝盖上仍有曾摔过的伤的淤青。你笑得没心没肺,没人知道你哭起来只能无声落泪。要让人觉得毫不费力,只能背后极其努力。我们没有改变不了的未来,只有不想改变的过去。
  • 相关阅读:
    课程评价
    6.1-6.7 第十六周总结
    5.31 软件开发日志
    5.25-5.31 第十五周总结
    5.30 软件开发日志
    5.29 软件开发日志
    5.28 软件开发日志
    对搜狗输入法的评价
    找水王
    用户模板/用户场景
  • 原文地址:https://www.cnblogs.com/wangzhe52xia/p/11441779.html
Copyright © 2011-2022 走看看