CF920 Eat the Chip (枚举算法)

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>>n>>m>>a>>b>>c>>d;
        if(a>=c)
            cout<<"Draw\n";
        else if((c-a)%2==0 ) /**< 后手赢 */
        {  /**< (b-d)-1+m-b,前面(b-d)-1为原始差距,后面m-b是逃离最大距离,两部分的和大于行差除2,可以逃离 */
            if(b-d>=1&&(b-d)-1+m-b>=(c-a)/2||d-b>=1&&d-b-1+b-1>=(c-a)/2)
               cout<<"Draw\n";
            else
                cout<<"Bob\n";
        }
        else
        {
            if(d-b>=2&&d-b-2+m-d>=(c-a)/2||b-d>=2&&b-d-2+d-1>=(c-a)/2)
                cout<<"Draw\n";
            else
                cout<<"Alice\n";
        }
    }
    return 0;
}

相关推荐

  1. C++算法(3)

    2024-01-28 16:16:04       32 阅读
  2. 算法总述

    2024-01-28 16:16:04       20 阅读
  3. 数据结构-算法

    2024-01-28 16:16:04       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-28 16:16:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-28 16:16:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-28 16:16:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-28 16:16:04       18 阅读

热门阅读

  1. 洛谷B3625迷宫寻路

    2024-01-28 16:16:04       30 阅读
  2. 用vue写表格实现数量的加减

    2024-01-28 16:16:04       39 阅读
  3. 算法训练营Day59(单调栈2)

    2024-01-28 16:16:04       34 阅读
  4. STM32F407移植OpenHarmony笔记2

    2024-01-28 16:16:04       33 阅读
  5. 数据结构和线程池

    2024-01-28 16:16:04       33 阅读
  6. 设计模式六(模板方法模式)

    2024-01-28 16:16:04       31 阅读
  7. bash 5.2中文修订5

    2024-01-28 16:16:04       29 阅读
  8. 阻抗的简介

    2024-01-28 16:16:04       31 阅读
  9. 计算机网络(第六版)复习提纲14

    2024-01-28 16:16:04       32 阅读
  10. react 什么是h函数

    2024-01-28 16:16:04       33 阅读