上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 29 下一页
摘要: /**State: Accepted 8104K 485MS C++ 1428B*题目大意:* 两个人在一个有向五环图上面走棋子,每次只能走一步,最后谁* 没有棋子可走就败,然后棋子可以重叠,并且有n个棋子。要求判断* 先手的胜负。*解题思路:* 一开始没有思路,后来试着用sg去推,推出sg了。*解题感想:* 用了静态邻接表之后,快了,但是此题不明显。* 果然,静态邻接表的边的数目要把握好,RE了两次。*/View Code 1 #include <iostream> 2 #inclu... 阅读全文
posted @ 2012-07-28 14:42 cchun 阅读(325) 评论(0) 推荐(0) 编辑
摘要: /**State: 1851 0MS 268K 862 B C++*题目大意:* (类似)给定n堆石子,然后规定每堆石子只能* 取的个数,然后最先取完者胜,要求判断局势的奇异。*解题思路:* 分别求sg即可。*/#include <iostream>#include <stdio.h>using namespace std;const int MAX = 21;int get_sg(int n, int t){ int sg[MAX], vst[MAX]; for(int i = 0; i < MAX; i++) ... 阅读全文
posted @ 2012-07-27 00:56 cchun 阅读(227) 评论(0) 推荐(0) 编辑
摘要: /**State: 1536 343MS 368K 1164 B C++*题目大意:* 给定一个集合S,然后规定每一堆石头只能取集合S中* 个数,然后要求出所有sg值,并判断结果。*解题思路:* 典型的求sg函数即可求解。*题目困惑:* 题目困惑了好久,最后我把错误排除到了求sg函数上,* 可是还是觉得没有问题,最后还是看了别人的解题报告,* 眼睛一扫,一秒就知道了问题所在。* 其实我一开始就想到了S集合要排序,但是没有细想,就* 过了,结果困扰了我这么久。*... 阅读全文
posted @ 2012-07-27 00:09 cchun 阅读(1073) 评论(0) 推荐(0) 编辑
摘要: /**State: 1848 0MS 320K 994 B C++*题目大意:* 给定3堆棋子,每次可以从每一堆中拿斐波那契个棋子,最后* 先取完者胜,判断该局是否为奇异局势(P或N点);*解题思路:* 典型的求sg函数即可求解。*/#include <iostream>#include <stdio.h>using namespace std;const int MAX = 1024;int sg[MAX];void pre_init(){ int fib[1024]; fib[0] = fib[1] = 1; ... 阅读全文
posted @ 2012-07-26 16:30 cchun 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 转载:http://www.wutianqi.com/?p=1081以下是我从网上收集的关于组合博弈的资料汇总:有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜. 阅读全文
posted @ 2012-07-26 15:43 cchun 阅读(231) 评论(0) 推荐(0) 编辑
摘要: /**State: 1704 Accepted 200K 16MS C++ 594B*题目大意:* 一个1*M的棋盘上有N个棋子,初始位置一定,两人轮流操作,* 每次移动一枚棋子,要求只能向左移且至少移动一格,而且不* 能到达或经过以前有棋子的格子,谁无法移动棋子就算输。*解题思路:* 先考虑两个棋子靠在一起的时候,这两对棋子就构成了一个* 奇异局势(P点)。所以可以把题目中的棋子分解为两对两对,* 两对两对之间是不需要考虑什么的。在同一对棋子中,如果对* 手移动前一... 阅读全文
posted @ 2012-07-26 15:27 cchun 阅读(1450) 评论(0) 推荐(0) 编辑
摘要: /**State: 1067 Accepted 176K 16MS C++ 435B*题目大意:* 威佐夫博弈*解题思路:* 略。*/#include <iostream>#include <stdio.h>#include <cmath>using namespace std;int main(void){ int big, small; while(scanf("%d %d", &big, &small) == 2) { if(big < small) { big ... 阅读全文
posted @ 2012-07-26 15:26 cchun 阅读(339) 评论(0) 推荐(0) 编辑
摘要: 博弈论(一):Nim游戏重点结论:对于一个Nim游戏的局面(a1,a2,...,an),它是P-position当且仅当a1^a2^...^an=0,其中^表示位异或(xor)运算。Nim游戏是博弈论中最经典的模型(之一?),它又有着十分简单的规则和无比优美的结论,由这个游戏开始了解博弈论恐怕是最合适不过了。Nim游戏是组合游戏(Combinatorial Games)的一种,准确来说,属于“Impartial Combinatorial Games”(以下简称ICG)。满足以下条件的游戏是ICG(可能不太严谨):1、有两名选手;2、两名选手交替对游戏进行移动(move),每次一步,选手可以在 阅读全文
posted @ 2012-07-26 15:25 cchun 阅读(895) 评论(0) 推荐(0) 编辑
摘要: /**State: 164K 0MS C++ 1254B*题目大意:* 对于n堆石子,每堆若干个,两人轮流操作,每次操作分两步,* 第一步从某堆中去掉至少一个,第二步(可省略)把该堆剩余* 石子的一部分分给其它的某些堆。最后谁无子可取即输。*解题思路:* 1、先考虑1堆的时候,1堆当然是N点(必胜点),* 2、然后考虑2堆,细想一下可以发现,当2堆一样时,这个时候* 的目的就是要把对方给逼到只有2堆都是1的时候,就能必胜了。* 但是想一下,后手只要模范先手所做的动作,那么... 阅读全文
posted @ 2012-07-26 02:59 cchun 阅读(313) 评论(0) 推荐(0) 编辑
摘要: /**题号:1907*State: 15MS 268K 572 B C++*题目大意:* Nim博弈的变形,就是先取完者败。*解题思路:* 如上题。* //必输态 S0(考虑奇偶), T2* //必胜态 S2, S1, T0*/View Code 1 #include <iostream> 2 using namespace std; 3 int main(void) 4 { 5 int cas; 6 scanf("%d", &cas); 7 while(cas--) 8 { 9 ... 阅读全文
posted @ 2012-07-25 23:28 cchun 阅读(1113) 评论(0) 推荐(1) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 29 下一页