
博-弈论
以实战为线索,分享关于该算法的题解和教学内容
MangataTS
一个爱折腾的Coder
展开
-
AcWing 894. 拆分-Nim游戏
题目链接https://www.acwing.com/problem/content/description/896/思路注意题意是:从这么多堆中拿走一堆,然后加上两堆较小(不一定相同)的石子那么最后一定是能将所有的石子全部变为0的,这也是该游戏的必败态对于每一个数量不同的石子我们就可以将其看作为一个SGSGSG局面,对于每一个局面我们可以将其分成两个小于当前局面的局面,假设当前局面数量为x,那么SG(X)=SG(i)SG(j)SG(X) = SG(i) ^ SG(j)SG(X)=SG(i)SG(j原创 2022-02-16 21:03:36 · 924 阅读 · 0 评论 -
AcWing 893. 集合-Nim游戏(SG函数)
题目链接https://www.acwing.com/problem/content/895/思路因为博弈的过程是一个状态交替的过程,而SG函数就是记录每一个状态交替的过程,从终点的必败态往前推,退出开始的状态(因为玩家都足够聪明),那么对于n堆的情况,其实和开始的nim也是一样的,我们需要求出每一堆的初始状态,然后异或起来如果不为0那么说明先手可以将当前的状态变为必败态,否则先手就是必败态,那么我们通过SG函数就能求得这个信息代码#include<bits/stdc++.h>usi原创 2022-02-16 18:38:52 · 627 阅读 · 0 评论 -
AcWing 892. 台阶-Nim游戏(nim博弈变种)
题目链接https://www.acwing.com/problem/content/description/894/思路先说结论:我们将奇数位置上的石子数异或起来如果不为0则先手必胜原理:假设我们奇数位置上的数全部异或起来为0,那么此时的局面可以看成奇数位置上的数全为0,那么对于偶数位置上的数来说想要全部移动到地面需要偶数次操作,也就是说此时的先手必败,那么对于奇数位置上异或起来不全部为0呢,我们先手可以进行一个移动操作,使得奇数位置上所有的数异或起来为0,也就是将必败态丢给了后手,后面后手做什原创 2022-02-16 18:36:17 · 1019 阅读 · 0 评论 -
AcWing 891. Nim游戏(nim博弈)
题目链接https://www.acwing.com/problem/content/893/思路这个题目需要清楚一个概念:必胜态:我们能通过一个操作使得局面变成必败态必败态:无论如何操作都不能变成必胜态如果当前的石子堆的数量都是成对出现的,那么一定是必败态,因为此时先手无论如何操作,后手都能做一个镜像的操作,最后先手就不能进行操作,所以此时先手必败,然后我们也知道全0也是必败态,我们其实可以从结果反推到我们开始的状态,如果当前的局面为成对出现那么此时的局面就是必败态,否则为必胜态,所以我们原创 2022-02-16 18:29:46 · 997 阅读 · 0 评论 -
HDU1517 A Multiplication Game (博弈论+思维)
题目链接:传送门题意:两个人玩游戏,给定一个数n,从1开始,轮流对该数累乘,直到该数大于等于n结束,Stan每次都先手解题思路:很明显我们可以发现当n为[2,9]的时候,Stan必胜,当n为[10,18]的时候,无论Stan输入了什么,Ollie都能乘以一个[2,9]的数使得当前的数大于等于n,换句话说也就是在n为[10,18]是Ollie的必胜区间,一次类推我们会发现当n为[19,162]...原创 2021-01-28 22:27:00 · 220 阅读 · 1 评论