博弈论
文章平均质量分 77
WA是一笔财富
这个作者很懒,什么都没留下…
展开
-
Game of Cards Gym - 101128G
题意:有n堆扑克牌,两个人轮流玩游戏,游戏规则: 先选一堆扑克牌,然后拿走堆顶0-k张,剩余的堆顶那一张牌上是几就必须再拿走几张,当某一方无牌可拿或者剩余张数不够必须拿走的张数时则该方输。 思路:不能再明显的博弈,但是比赛时就是不知道SG函数怎么写啊。。 之前也看过很多博弈的博客,sg函数也大致知道怎么求,但就是应用不上啊。。 其实sg函数的核心就是一个mex运算,求出其所有子状态中未出现原创 2017-03-31 22:02:41 · 574 阅读 · 0 评论 -
HDU 6105 Gameia 博弈(思维)
传送门:HDU6105 题意:给出一棵树,Alice 和 Bob 轮流操作, Alice先手, Alice的操作是选一个未染色的点将其染成白色,Bob的操作是选一个未染色的点将其染成黑色,并且和这个点有直连边的点也被强制染成黑色(无论这些直连点之前是否有颜色),Bob还有一个小技能是去掉一条边,最后当所有点都有颜色的时候,如果有白色点则Alice赢,否则Bob赢。 思路: 1.如果Bob能把原创 2017-08-10 19:02:15 · 1023 阅读 · 0 评论 -
基础博弈合集(不定期持续更新)
传送门:Matrix Game LightOJ - 1247 题意:给出m行n列的矩阵,每个点有石子,alice和bob玩游戏,每次可以选择一行,然后从该行拿任意个石子但不能不拿,alice先拿,最后谁不能拿谁输。问最后谁能赢。 思路:基础nim博弈,稍微变形,把一行的石子合起来看做一堆就是基础nim博弈了。 代码: #include #define ll long long #defi原创 2017-09-13 18:02:34 · 208 阅读 · 0 评论 -
LightOJ - 1199 Partitioning Game sg函数
传送门:LightOJ - 1199 题意:有n堆石子,每一堆有xi个,一次操作可以使一堆石子变成两堆数目不相等的石子,最后不能操作的算输,问先手胜还是后手胜。 思路:假设每堆相互独立,那么每堆被分成两堆后就变成了两个独立的游戏,则胜负就可以用nim和(异或)求解。 结合数据范围一看就知道是求sg函数,然而我写了递归版的求sg无限re。。 因为堆每次一分为二必定比原来的小,因此for循环原创 2017-09-13 18:15:23 · 210 阅读 · 0 评论 -
LightOJ - 1229 Treblecross sg函数
传送门:Treblecross LightOJ - 1229 题意:一排n个位置,有些位置已经放上了字母X,剩下的是空的。两人轮流放置X在空的位置。放置后出现连续3个X的赢。问先手是否有必胜策略?若有,可以放在哪些地方? 思路:肯定是要枚举先手放的位置,然后判断是否能赢,而判断是否能赢我们就要求sg函数了,然而这个题直接求sg函数的话很难求,因为状态太复杂了,巧妙的思路是将连续的空闲位置拿出原创 2017-09-13 19:21:07 · 356 阅读 · 0 评论 -
HDU - 5724 Chess 博弈(sg函数)
传送门:HDU 5724 题意:n×20的棋盘内放置了一些棋子,每颗棋子走到向右的最近的空格(可以跳过其他棋子)为一次操作,Alice先手,问谁会赢。 思路:由于每行长度只有20,因此我们可以状压预处理出所有状态的sg函数,然后对输入的每一行的状态的sg值异或起来就好了。 代码: #include using namespace std; bool vis[22]; int sg[1 <<原创 2017-08-28 21:21:25 · 287 阅读 · 0 评论 -
HDU - 5963 朋友 思维 + 博弈
题意:中文题。 思路:考虑和根相连的一条树链,如果这条树链上和根相连的那条边权值为1,那么最终在该链上的操作次数要为奇数次才能使得和根相连的边的权值变为0(因为不论选择该条树链上哪个点,此边的权值总会翻转),同理可得和根相连的边若初始权值为0要操作偶数次。而无论两个人怎么操作,都不会改变这些根的直连边变0所需操作次数的奇偶性,而若总操作次数为奇数次的话那就必定是先手胜了,因此我们只需维护一个每个原创 2017-10-16 23:50:46 · 305 阅读 · 0 评论