反尼姆博弈
Posted -ackerman
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反尼姆博弈相关的知识,希望对你有一定的参考价值。
在尼姆博奕中取完最后一颗糖的人为赢家,而取到最后一颗糖为输家的就是反尼姆博奕。这道题就反尼姆
博奕的模型。在尼姆博奕中判断必胜局面的条件是所有堆石子数目相异或不等于0 。 而在反尼姆博奕中判断必胜局
面的条件有两点,满足任意一点先手都能取胜,即必胜局面。
题目链接:https://cn.vjudge.net/contest/317258#problem/I
1、若所有堆的数量都为1, 并且1的数量为偶数先手赢。
2、若不都为1, 那么判断ans即可。
1 #include <cmath> 2 #include <cstdio> 3 #include <cstring> 4 #include <iostream> 5 #include <algorithm> 6 #include <math.h> 7 8 using namespace std; 9 const int maxn = 1e5+5; 10 11 int arr[maxn]; 12 13 int main() 14 15 int T; 16 scanf("%d",&T); 17 while (T--) 18 19 int n; 20 int ans = 0; 21 int k = 0; 22 scanf("%d",&n); 23 for (int i=0;i<n;i++) 24 25 int a; 26 scanf("%d",&a); 27 ans ^= a; 28 if (a>1) 29 k = 1; 30 31 if (k == 0) 32 33 if (ans%2) 34 puts("Brother"); 35 else 36 puts("John"); 37 38 else 39 40 if (ans) 41 puts("John"); 42 else 43 puts("Brother"); 44 45 46 return 0; 47
以上是关于反尼姆博弈的主要内容,如果未能解决你的问题,请参考以下文章