随笔分类 -  ACM-博弈

摘要:题意:n堆石头,每堆石头个数:s[1]...s[n]。每人每次可以选择在一堆中取若干个(不能不取),或者把一堆石头分成两堆(两堆要都有石头)。无法操作者负。数据范围:(1 ≤ N ≤ 10^6, 1 ≤ S[i] ≤ 2^31 - 1)思路:S[i]太大了,直接求SG铁定TLE,所以先把SG打出来看... 阅读全文
posted @ 2014-10-03 20:35 fish7 阅读(163) 评论(0) 推荐(0)
摘要:题意:一排石头,个数是K。有n个数,a1...an。每人每次取石子只能取连续的x个。x属于a1...an的一个。没法取者负。思路:简单的SG。但是TLE!后面加了一个优化~这个优化不好想到吧,看了别人的代码才发现的。就是把a1...an中重复的去掉!。。。直接看代码。代码:int sg[1005];... 阅读全文
posted @ 2014-10-03 20:28 fish7 阅读(286) 评论(0) 推荐(0)
摘要:题意:3堆石头,个数分别是m,n,p。两个轮流走,每走一步可以选择任意一堆石子,然后取走f个。f只能是菲波那契中的数(即1,2,3,5,8.....)取光所有石子的人胜。判断先手胜还是后手胜。思路:简单SG。看代码。代码:int sg[1005];int dfs(int x){ if(sg[x... 阅读全文
posted @ 2014-10-03 20:23 fish7 阅读(141) 评论(0) 推荐(0)
摘要:题意:有一张W*H的纸片。每人每次可以横着撕或者竖着撕,先撕出1*1那一方胜。数据范围:W and H (2 <= W, H <= 200)思路:很好抽象出游戏图的模型,用SG解决。直接看代码。代码:int dp[maxn][maxn];int sg(int w,int h){ if(dp[w... 阅读全文
posted @ 2014-10-03 16:05 fish7 阅读(155) 评论(0) 推荐(0)
摘要:题意:给一个由N个点组成的一张有向图,不存在环。点的编号是0~N-1。然后给出M个棋子所在的位置(点的编号)【一个点上可同时有多个棋子】。每人每次可移动M个棋子中的一个棋子一步,移动方向是有向边指向的方向。最后无法移动棋子的人输。思路:一眼就可看出的裸的SG,直接看代码吧。代码:int sg[100... 阅读全文
posted @ 2014-10-03 10:58 fish7 阅读(166) 评论(0) 推荐(0)
摘要:题意:1 ×n 个格子,每人每次选一个格子打上叉(不得重复),如果一个人画完叉后出现了连续的三个叉,则此人胜。给n,判断先手胜还是先手败。思路:假设选择画叉的位置是i,则对方只能在前[1,i-3]中或[i+3,n]中选择画叉。子问题出现。根据SG的定义,即可求出SG(N)。看代码。代码:int sg... 阅读全文
posted @ 2014-10-03 02:41 fish7 阅读(136) 评论(0) 推荐(0)
摘要:题意:K个数,s1...sk。m个状态,对于某一个状态,有L堆石子,每人每次取的石子个数只能是s1...sk的一个,且只能在一堆中取。输出m个状态是先手胜还是先手败,先手胜输出W,否则输出L。输入格式及数据范围:For each test case: The first line contains ... 阅读全文
posted @ 2014-10-03 01:35 fish7 阅读(163) 评论(0) 推荐(0)
摘要:题意:N个棋子,位置分别是p[1]...p[N]。Georgia和Bob轮流,每人每次可选择其中一个棋子向左移动若干个位置(不能超过前一个棋子,不能超出最左边【位置1】且不能不移)Georgia先手,问谁赢。思路:将棋子按位置从右到左两个两个作为一对。若棋子总个数是奇数,将第一个棋子和【位置0】作为... 阅读全文
posted @ 2014-10-02 19:51 fish7 阅读(102) 评论(0) 推荐(0)
摘要:1.游戏有两个人参与,二者轮流做出决策。且这两个人的决策都对自己有利。2.当有一人无法做出决策时游戏结束,无法做出决策的人输。无论二者如何做出决策,游戏可以在有限步内结束。3.游戏中的同一个状态不可能多次抵达。且游戏不会有平局出现。4.任意一个游戏者在某一确定状态可以作出的决策集合只与当前的状态有关... 阅读全文
posted @ 2014-10-02 16:32 fish7 阅读(984) 评论(0) 推荐(0)
摘要:题意:m堆石头,每堆石头个数:a[1]....a[m]。每次只能在一堆里取,至少取一个。最后没石子取者负。先取者负输出NO,先取胜胜输出YES,然后输出先取者第1次取子的所有方法。如果从有a个石子的堆中取若干个后剩下b个后会胜就输出a b思路:裸的NIM。单看一堆石子,没有石头sg[0]=0,一个石... 阅读全文
posted @ 2014-10-01 21:05 fish7 阅读(201) 评论(0) 推荐(0)
摘要:题意:n*m的棋盘,一枚硬币右上角,每人每次可将硬币移向三个方向之一(一格单位):左边,下边,左下边。无法移动硬币的人负。给出n和m,问,先手胜还是后手胜。数据范围:n, m (0=1 && b1>=1 && go(a1,b1)==1) return f[n][m] = 0; if(a2>=1... 阅读全文
posted @ 2014-10-01 20:35 fish7 阅读(160) 评论(0) 推荐(0)
摘要:题意:N=4时规则:双方每次可以连接自己颜色的两个点(相邻,长度为1),线和线不能交叉重叠。蓝方要连接左右,红方要连接上下。蓝方先。问谁先连接?思路:经过观察。。。。蓝方胜。。。。。。。(无语)【我不知道如何证明!】代码:就不贴了。。。 阅读全文
posted @ 2014-10-01 20:12 fish7 阅读(137) 评论(0) 推荐(0)
摘要:题意:n张牌,双方轮流抓取。每人每次抓取的牌数必须是2的幂次(1,2,4,8...)。最后抓完的人胜。思路 :考虑剩3张牌,后手胜。考虑3的倍数。假设先抓者当轮抓2x 张,2x %3等于1或2。故先手不管怎么取,后手取1或2则可凑成3的倍数。故若总牌数是3的倍数,先手败。否则先手胜。代码:int n... 阅读全文
posted @ 2014-10-01 19:49 fish7 阅读(142) 评论(0) 推荐(0)