传送门

看到棋盘先黑白染色冷静一下

然后分析发现,如果初始时两只马在同色的格子,那么一定是后手吃先手

反之一定是先手吃后手

所以分类讨论一下,如果初始在同色的格子,并且后手到达终点的步数更少,那么后手一定赢

并且如果后手威胁到先手终点时的步数比先手到终点的步数少,那么后手下一步直接到先手终点,此时先手为了不被吃最多只能跳到离终点三步的位置(这个自己画一下图就很容易理解了),然后后手再花三步跳到自己终点即可,先手一定是赶不上的

否则,后手就没法阻止先手了

(先手总是有路可以用最短步数到达终点,后手如果可以把先手的最短路径都封锁那么此时后手到达自己终点的步数一定比较小)

总之,画图分类讨论一波

如果是不在同色格子就按先手能否赢讨论即可,都差不多,只是因为先手的原因,步数相等时先手比较快

具体实现看代码吧,代码参考:rui-de

$auto$ 大法好!(请使用 $C++14$ )

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
const int N=,xx[]={,,,,-,-,-,-},yy[]={,,-,-,-,-,,},INF=1e9;
int n,m,xa,ya,xb,yb;
int d1[N][N],d2[N][N];
struct poi {
int x,y;
poi (int _x=,int _y=) { x=_x,y=_y; }
};
queue <poi> Q;
void BFS(int sx,int sy,auto &mp)
{
Q.push(poi(sx,sy)); mp[sx][sy]=;
while(!Q.empty())
{
poi u=Q.front(); Q.pop();
for(int k=;k<;k++)
{
int tx=u.x+xx[k],ty=u.y+yy[k];
if(tx<||tx>n||ty<||ty>m||mp[tx][ty]<INF) continue;
mp[tx][ty]=mp[u.x][u.y]+; Q.push(poi(tx,ty));
}
}
}
void dfs(int sx,int sy,auto &mp)
{
for(int k=;k<;k++)
{
int tx=sx+xx[k],ty=sy+yy[k];
if(tx<||tx>n||ty<||ty>m||mp[tx][ty]>=mp[sx][sy]) continue;
cout<<tx<<" "<<ty<<endl; dfs(tx,ty,mp); break;
}
}
int main()
{
memset(d1,0x3f,sizeof(d1)); memset(d2,0x3f,sizeof(d2));
cin>>n>>m; cin>>xa>>ya>>xb>>yb;
BFS(n/,m/,d1); BFS(n/+,m/,d2);
int wht=d1[xa][ya],blk=d2[xb][yb];
int w_b=d2[xa][ya],b_w=d1[xb][yb];
if( ((xa+ya)&) == ((xb+yb)&) )
{
if(blk<wht) { printf("BLACK\n"); dfs(xb,yb,d2); return ; }
if( b_w-<wht )
{
printf("BLACK\n");
dfs(xb,yb,d1); dfs(n/,m/,d2);
return ;
}
printf("WHITE\n"); dfs(xa,ya,d1);
return ;
}
if(wht<=blk) { printf("WHITE\n"); dfs(xa,ya,d1); return ; }
if(w_b-<=blk)
{
printf("WHITE\n");
dfs(xa,ya,d2); dfs(n/+,m/,d1);
return ;
}
printf("BLACK\n"); dfs(xb,yb,d2);
return ;
}

Codeforces 1201E2. Knightmare (hard)的更多相关文章

  1. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  2. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  3. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  4. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  5. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  6. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  7. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

  8. CodeForces - 696B Puzzles

    http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...

  9. CodeForces - 148D Bag of mice

    http://codeforces.com/problemset/problem/148/D 题目大意: 原来袋子里有w只白鼠和b只黑鼠 龙和王妃轮流从袋子里抓老鼠.谁先抓到白色老鼠谁就赢. 王妃每次 ...

随机推荐

  1. scrapy_redis的使用

    配置Scrapy-Redis 配置Scrapy-Redis非常简单,只需要修改一下settings.py配置文件即可. 1. 核心配置 首先最主要的是,需要将调度器的类和去重的类替换为Scrapy-R ...

  2. javascript 取小数点后几位四种方法

    javascript 取小数点后几位方法总结 Javascript取float型小数点后两位,例22.123456取成22.12,如何做? 1.通过substring截取. function getn ...

  3. Windows 全绿色安装Mysql

    1.从Oracle官网上下载Mysql的Windows安装包,注意要下载Zip文件 2.将Mysql的Zip文件下载到本地电脑指定目录下 3.配置my.inia. 在<安装目录>下创建一个 ...

  4. Jenkins Publish FTP远程部署过程

    步骤: 1.安装FileZilla FTP Server 2.添加FTP账号: 1.Edit——Users——Add 2.Edit——Users——Shared folders 3.下载FileZil ...

  5. 1、WebSphere Application Server的下载以及安装

    最近在做农行相关的项目,我们的后台需要发布到农行WebSphere Application Server上,因此学习一下: 一.WebSphere 是什么? WebSphere 为 SOA (面向服务 ...

  6. 连续子数组的最大和 java实现

    package findMax; /** * 连续子数组的最大和 * @author root * */ public class FindMax { static int[] data = {1,- ...

  7. Ironic 的 Rescue 救援模式实现流程

    目录 文章目录 目录 救援模式 实现 UML 图 救援模式 以往只有虚拟机支持救援模式,裸机是不支持的.直到 Queen 版本 Ironic 实现了这个功能.救援模式下,用户可以完成修复.Troubl ...

  8. 系统启动热键(Boot Hotkey)

    1.HP ENVY 13 F1 --> 系统信息F2 --> 系统检测F9 --> 启动设备选项F10 --> 设置BIOSF11 --> 系统恢复ENTER --> ...

  9. java:面向对象(接口(续),Compareble重写,Comparator接口:比较器的重写,内部类,垃圾回收机制)

    接口: *接口定义:使用interface关键字 * [修饰符] interface 接口名 [extends 父接口1,父接口2...]{ * //常量的声明 * //方法的声明 * } *接口成员 ...

  10. postman插件的安装以及简单介绍

    1:postman是干什么的? Postman官网上这么介绍的:“Modern software is built on APIs,Postman helps you develop APIs fas ...