

题目大意:棋盘上白棋子Alice先手,黑棋子Bob后手。白棋子只能向下三个位置,黑棋子只能向上三个位置,谁先走到对方棋子位置就获胜。两个棋子起点一定不相同。
分析:显然问题是有规律性的,如果白棋子在下而黑棋子在上,那么一定平局。
继续分析如果两个棋子行数差距为奇数先手赢,偶数后手赢。
以奇数行差距为例,后手玩家为避免被吃掉,走棋时一定要尽可能远离白棋,
情况1:如果起始两个棋子列数差为1或者0,那么白棋先走可以始终保持在黑棋正上方,黑棋必败。
情况2:列数差大于等于2,此时黑棋走棋趋势为加大这个列数差,白棋一定减少这个列数差。如果棋盘无限大,那么必然平局。但是棋盘不是无限大,黑棋每逃离一次,白棋追赶一次,两个棋子行数差会减少2.以此为判定条件,问题可解。
ps:需要注意初始时两个棋子列数差也要考虑进去。为方便阅读,代码没有进行公式化简
#include <iostream>
using namespace std;
int main()
{
int t,n,m,a,b,c,d;
cin>>t;
while(t--)
{
cin&g

文章讲述了在一种特殊的棋盘游戏中,白棋和黑棋遵循特定的移动规则,分析了行数差距对先手和后手胜率的影响,提供了基于列数差的计算方法来决定比赛结果。给出C++代码示例来解决这一问题。
最低0.47元/天 解锁文章
314

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



