题目大意:有一个无限长的一维的棋盘,棋盘上N个格子放置着棋子。两个人轮流操作,每次操作能选择其中一个棋子向左移动,但不能越过其它棋子或者两枚棋子放在同一格中,最后不能操作的人算输,问先手是否必胜?思路:就是裸的阶梯博弈(staircase nim)方法也很简单。首先每个棋子能向右移动的距离是有限的,...
分类:
其他好文 时间:
2014-10-05 14:52:58
阅读次数:
179
题目地址:POJ 1704
这个题实在巧妙。。居然这样就可以转化成了经典的nim模型。
这题可以从左往右两两配对,如果是奇数个的话,就让最左边的与0配对。然后每当对方移动某一对的前一个,你总可以移动该对的后一个来移动回来。所以这是没有影响的。有影响的只是每一对中间的空格数。这就转化成了((n+1)/2)堆石子的游戏,每一堆的石子个数是每一对点之间的空格数。然后用异或求解。
代码如下:
#i...
分类:
其他好文 时间:
2014-09-15 22:56:19
阅读次数:
270
//nim博弈
//有n堆石头,两人轮流每次从一堆中拿至少1,之多全部的石头,没有石头可拿为lose
//判断先手是win还是lose
# include
# include
# include
using namespace std;
int main()
{
int n,i;
__int64 a,sum;
while(~scanf("%d",&n))
{
...
分类:
其他好文 时间:
2014-09-15 21:24:20
阅读次数:
234
# include
# include
# include
# include
# include
using namespace std;
int main()
{
int n,m,i,a,b,cot;
while(~scanf("%d%d",&n,&m))
{
cot=0;
for(i=0; i<n; i++)
...
分类:
其他好文 时间:
2014-09-15 21:22:29
阅读次数:
268
题目:HDU4994Revenge of Nim(博弈)
题目大意:有两个人在玩取石子的游戏,每个人只能从最前面的那堆取石子,至少取一个,最后取完石子的人win。问先手是否能获胜。
解题思路:每堆只有一个石子的话,那么这个人只能取完这一堆,然后当某一堆有超过1个石子的话,那么最先取这堆的人就可以根据后面的情况来调控这个石子(将这堆全取完,或者是取得只剩一个)。所以这题先手是否胜...
分类:
其他好文 时间:
2014-09-15 17:48:39
阅读次数:
153
题目地址:HDU 1850
这个博弈论异或这个地方感觉真绕,仔细想了一下,终于把它给理清楚了。总结一下之前不太理解的:
1:在当前操作中,只要可以达到某个必败态,那这个点一定是必胜态的,因为要想获胜,肯定会选择必败态的操作。
2:只有当所有值的异或值为0的时候,才是必败态,所以说对于N堆的nim游戏来说,第一步的操作对于每一堆来说只能有至多一种可以形成必败态。因为另外(n-1)堆的异或值是唯...
分类:
编程语言 时间:
2014-09-15 15:57:09
阅读次数:
187
和NIM博弈是一模一样的
Game
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 148 Accepted Submission(s): 116
Problem Description
Here ...
分类:
其他好文 时间:
2014-09-15 01:09:08
阅读次数:
185
题目地址:HDU 1849
初次接触nim博弈,感觉好神奇的说。。。居然可以跟异或运算扯上关系。。。。给人类的智商跪了。。。作为地球人我感到很自豪。。
具体证明什么的看这篇博客被。传送门
代码如下:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#inc...
分类:
其他好文 时间:
2014-09-14 22:13:17
阅读次数:
276
hdu 4994 Revenge of Nim(博弈)...
分类:
其他好文 时间:
2014-09-13 18:45:55
阅读次数:
168