博奕
呆呆的人v
这个作者很懒,什么都没留下…
展开
-
hdu 2147 kiki's game(博奕)
题意: 在一个m*n的棋盘内,从(1,m)点出发,每次可以进行的移动是:左移一,下移一,左下移一。然后kiki每次先走,判断kiki时候会赢(对方无路可走的时候)。 思路:定义状态 P为必败点,N为必胜点。有以下结论 (1):最终态都是P (2):按照游戏规则,到达P态都是N的话 (3):按照游戏规则,到达当前态的前态至少有一个P的话,当前态是N 于是可得如下图: 2147 kiki's gam原创 2013-04-23 09:28:49 · 488 阅读 · 0 评论 -
poj 2960 S-Nim(博奕)
题意:跟前一道 Fibonacci again and again 差不多,对每种S只能取固定的数,下面有m组测试数据,每组开始一个l 表明有多少个数,接着输入l个hi,对于每组问先手是赢是输。 思路:一样的求SG函数,注意两点,第一,给出S所能取的数不一定是从小到大的,所以得排序;第二,按普通的求SG函数方法,会超时,无耐看也别人的方法才知道得用递归求SG。 还有一点不明白,他们为什么都把SG原创 2013-04-23 09:28:57 · 514 阅读 · 0 评论 -
hdu 1848 Fibonacci&nbs…
思路:SG函数的应用,可取的值为不连续的固定值,可用GetSG求出SG,然后三堆数异或。 //0MS 240K #include #include const int M = 1005; int Fibs[M],SG[M],hash[M]; void Fib() { Fibs[1] = 1; Fibs[2] = 2; for (int i = 3;Fibs[i]原创 2013-04-23 09:28:53 · 525 阅读 · 0 评论 -
poj 1704 Georgia and Bob(博奕)
题意:Georgia and Bob 玩游戏,在一条形格子中有N个棋子,他们可以选择任意棋子,往左移到不超过其它棋子和最左边的任意步数。谁不能走谁输。 思路:跟Nim很像,把两个棋子的距离看成一堆石子,因为如果你把左边的棋子移动任意步数,右边的棋子跟着移动相同步数就会抵消(例 2 3 3 等同于 2),这样就转换成Nim游戏了。 //176K 16MS #include #includ原创 2013-04-23 09:28:59 · 553 阅读 · 0 评论 -
SG函数模板
/* 计算从1-n范围内的SG值。 Array(存储可以走的步数,Array[0]表示可以有多少种走法) Array[]需要从小到大排序 1.可选步数为1-m的连续整数,直接取模即可,SG(x) = x % (m+1); 2.可选步数为任意步,SG(x) = x; 3.可选步数为一系列不连续的数,用GetSG(计算) */ int SG[MAX], hash[MAX]; void GetSG(原创 2013-04-23 09:28:51 · 459 阅读 · 0 评论