CF920 Eat the Chip (枚举算法)

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

Problem - E - Codeforces传送门

题目大意:棋盘上白棋子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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值