"蔚来杯"2022牛客暑期多校训练营6-M-Z-Game on grid
题目大意
Alice和Bob在一个 n × m n\times m n×m的棋盘上玩游戏,起点为 ( 0 , 0 ) (0,0) (0,0),每次只能向下移一格或向右移一格,即从 ( x , y ) (x,y) (x,y)移至 ( x + 1 , y ) (x+1,y) (x+1,y)或 ( x , y + 1 ) (x,y+1) (x,y+1)。棋盘上有’A’和’B’,移动至’A’为Alice赢,移动至’B’为Bob赢,移动至 ( n , m ) (n,m) (n,m)为平局。现在,Alice先移动,问有没有走法使Bob无论怎么走,结果都为Alice赢或平局或Bob赢。
解析
这是一道博弈题,所以我们先把问题拆分成小一点的情况来分析(黄色框表示当前所在格子)。
-
1

显然,此时不管怎么走,都是Alice赢,都为B也是同理,为Bob赢。 -
2

此时的结果就与走的人有关了,如果此时Alice走,那么Alice可以保证Alice赢或是Bob赢,而如果此时是Bob走,那么Alice就不能保证输赢。因为每次只能走一格,我们可以得到,当位于 ( x , y ) (x,y) (x,y)时,若 ( x + y ) m o d 2 = 0 (x + y) mod 2=0 (x+y)mod2=

这篇博客探讨了一种两人棋盘游戏的策略,玩家Alice和Bob在n×m的棋盘上移动,目标是到达'A'、'B'或棋盘边缘。通过位运算和动态规划,分析了在不同情况下Alice和Bob的获胜策略,以及如何确保特定的获胜条件。文章提供了一个C++代码示例来解决这个问题。
最低0.47元/天 解锁文章

581

被折叠的 条评论
为什么被折叠?



