码迷,mamicode.com
首页 > 其他好文 > 详细

nim博弈

时间:2019-09-01 12:26:47      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:close   表示   blank   http   ssi   while   XML   space   范围   

原题链接 :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

 

nim博弈

标签:close   表示   blank   http   ssi   while   XML   space   范围   

原文地址:https://www.cnblogs.com/wangzhe52xia/p/11441779.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!