随笔分类 -  博弈

摘要:题意:每次必须拿且只能拿不超过一半的石头,不能拿为败 思路:显然算出每个的sg函数,但是范围1e9显然不能直接打表。所以先打表找规律,发现偶数一直是自己的一半,奇数好像没规律。偶数x的sg函数值是x/2,说明前x/2~x-1的sg函数值涵盖了所有0~x/2集合的值,那么比他大1的奇数x+1少了x/2 阅读全文
posted @ 2018-09-28 20:02 KirinSB 阅读(154) 评论(0) 推荐(0)
摘要:题意:给你一串含“.”和“X”的字串,每次一个玩家可以把‘."变成“X”,谁先弄到三个XXX就赢。假如先手必赢,输出所有能必赢的第一步,否则输出0。 思路:显然如果一个X周围两格有X那么肯定能一步变成XXX,所以两个人都要避免在自己回合产生这种情况。如果一开始就存在上述情况,那么肯定是那一步。否则我 阅读全文
posted @ 2018-09-27 22:44 KirinSB 阅读(303) 评论(0) 推荐(0)
摘要:题意:可以把一堆石子分成不相等的两堆,不能操作为败 思路:把一个石子拆成两个,变成了两个独立的游戏,mex里加上两者的sg异或。sg打表。 代码: 阅读全文
posted @ 2018-09-26 21:29 KirinSB 阅读(270) 评论(0) 推荐(0)
摘要:题意:r*c方格中,每个格子有一定石子,每次移动每格任意数量石子,只能向下或者向右动一格,不能移动为败 思路:显然是Nim,到右下曼哈顿距离为偶数的不用管,因为先手动一下后手动一下最后移到右下后还是先手的回合;奇数移动一格必到偶数格,所以奇数的Nim一下。很简单的入门题。 代码: 阅读全文
posted @ 2018-09-26 14:39 KirinSB 阅读(405) 评论(0) 推荐(1)
摘要:思路:三维Nim积 代码: 阅读全文
posted @ 2018-09-25 12:50 KirinSB 阅读(410) 评论(0) 推荐(1)
摘要:题意:在一个二维平面中,有n个灯亮着并告诉你坐标,每回合需要找到一个矩形,这个矩形xy坐标最大的那个角落的点必须是亮着的灯,然后我们把四个角落的灯状态反转,不能操作为败 思路:二维Nim积,看不懂啊,只能套模板了 参考:HDU 3404 Switch lights (NIM 积) 代码: 阅读全文
posted @ 2018-09-25 11:56 KirinSB 阅读(355) 评论(0) 推荐(0)
摘要:题意:有a,b两个数字,两人轮流操作,每次可以选择两个之中较小的数字,然后另一个数字减去选择数字的任意倍数(不能减到负数),直到其中一个为0,不能操作为败 思路:这题用博弈NP思想,必败点和必胜点之间的转化。 我们假设当前状态为(x,y)其中x>=y,那么必有以下任一状态: 1. x < 2 * y 阅读全文
posted @ 2018-09-24 23:10 KirinSB 阅读(377) 评论(0) 推荐(0)
摘要:题意:n堆石头,拿走最后一块的输 思路:SJ定理:先手必胜当且仅当:(1)游戏的SG函数不为0且游戏中某个单一游戏的SG函数大于1;(2)游戏的SG函数为0且游戏中没有单一游戏的SG函数大于1。 参考:【博弈】Anti,Multi,Every-SG 代码: 阅读全文
posted @ 2018-09-21 22:31 KirinSB 阅读(194) 评论(0) 推荐(0)
摘要:题意:有n个石子堆,每一个都可以轮流做如下操作:选一个石堆,移除至少1个石子,然后可以把这堆石子随便拿几次,随便放到任意的其他石子数不为0的石子堆,也可以不拿。不能操作败。 思路:我们先来证明,如果某个石子数有偶数堆,则先手必败,因为无论先手怎么做,后手都能模仿先手,最后把石子取光。显然全是偶数堆是 阅读全文
posted @ 2018-09-20 23:06 KirinSB 阅读(220) 评论(0) 推荐(0)
摘要:题意:有一个一维棋盘,有格子标号1,2,3,......有n个棋子放在一些格子上,两人博弈,只能将棋子向左移,不能和其他棋子重叠,也不能跨越其他棋子,不能超越边界,不能走的人输 思路:可以用阶梯博弈来做。 那么先简单讲一下阶梯博弈: 有一个x阶阶梯,每一阶都有一定数量的石头,每次只能把某一阶梯上任意 阅读全文
posted @ 2018-09-19 23:39 KirinSB 阅读(246) 评论(0) 推荐(0)
摘要:题意:给一个有向图,然后个m颗石头放在图上的几个点上,每次只能移动一步,如果不能移动者败 思路:dfs打表sg函数,然后求异或和 代码: 阅读全文
posted @ 2018-09-19 15:17 KirinSB 阅读(407) 评论(0) 推荐(0)
摘要:题意:给一端n块的板,两人玩,每次能涂相邻两块没涂过的板,不能涂的人为输,先手赢输出yes 思路:sg函数打表,练习题 代码: 阅读全文
posted @ 2018-09-18 00:11 KirinSB 阅读(237) 评论(0) 推荐(0)
摘要:题意:已知异或和为0为必败态,异或和不为0为必胜态,问你有几种方法把开局从当前状态转为必败态。 思路:也就是说,我们要选一堆石头,然后从这堆石头拿走一些使剩下的石碓异或和为0。那么只要剩下石堆的异或和小于选中石堆的大小,那么肯定能从选中石堆中找出一定数目和剩下的石堆异或后归零。 代码: 阅读全文
posted @ 2018-09-16 23:12 KirinSB 阅读(220) 评论(0) 推荐(0)
摘要:思路:SG打表 参考:SG函数和SG定理【详解】 代码: 阅读全文
posted @ 2018-09-16 00:49 KirinSB 阅读(199) 评论(0) 推荐(0)
摘要:思路:dfs找先手必胜的情况是否存在 代码: 阅读全文
posted @ 2018-08-22 15:26 KirinSB 阅读(273) 评论(0) 推荐(0)
摘要:题意: 给一个矩阵,每一次一个玩家可以从任意一行中选任意数量的格子并从中拿石头(但最后总数要大于等于1),问你谁赢 思路: 一开始以为只能一行拿一个... 将每一行石子数相加就转化为经典的Nim博弈 代码: 阅读全文
posted @ 2018-07-13 14:28 KirinSB 阅读(305) 评论(0) 推荐(0)