CF1201E2 - Knightmare (Hard)
CF1201E2 - Knightmare (hard)
题目大意
$n\times m(2|n,2|m)$的棋盘上有两个 马 (Knight是国际象棋) 分别位于$S_1=(x_1,y_1),S_2=(x_2,y_2)$
他们分别要到达$T_1=(\frac{n} {2},\frac{m} {2}),T_2=(\frac{n} {2}+1,\frac{m} {2})$
一方胜利的情况是:
1.吃掉另一方
2.到达自己的目标位置,且这个位置不能被另一方吃掉
你可以选定操作先手还是后手,要求和交互器交互,并且在350步内取胜
分析
首先是一个重要的性质:双方必然有一方永远无法吃掉另一方
考虑象棋的移动,每次$(x\pm 1,y\pm 2)$或者$(x\pm 2,y\pm 1)$
每次操作,必然导致$x+y\mod 2$改变,在双方轮流操作的过程中
必然有一方走的时候永远无法和另一方同奇偶,也就是无法吃掉另一方
在此基础上,考虑几种情况
设$D(a,b)$为$a,b$两点的距离,$f$为先手是否永远不会被吃
1.先手可以在不被后手吃掉的情况下到达目标,且先于后手
先于后手即$D(S_1,T_1)\leq D(S_2,T_2)$
先手不被后手吃掉的情况
1.$f$ : 显然
2.$D(S_1,T_1)<D(S_2,T_1)$:
此时,假设后手存在一个吃掉先手的策略
那么后手经过这个吃掉先手的点到达$T_1$的最短路一定和先手相同,故矛盾
2.后手可以在不被先手吃掉的情况下到达目标,且先于先手
$D(S_1,T_1)>D(S_2,T_2)$
对称情况
1.$not\ f$
2.$D(S_2,T_2)<D(S_1,T_2)-1$
以上两种情况均直接冲最短路到达目标
3.双方均无法安全直接抵达目标
此时,考虑选择不会被吃的一方操作
由于自己是无敌的,可以考虑先猛扑对方的终点
3.1 $f=true$,选择先手
先走到$T_2$堵住后手,然后可以绕三步到达$T_1$
先手占据$T_2$时,后手无法到达$T_2$
走第一步时,由于先手限制着,后手无法进入$T_2$
走第二步时,根据奇偶性分析,后手无法到达$T_2$的奇偶性
第三步到达目标
3.2$f=false$,同理
实现
可以好好封装一下
我曾经以为不用读入
由于交互器下面读入的参数可能会让交互器走智障操作
如果能吃掉对方,一定要直接吃掉
1 | const int N=1010,INF=1e9+10; |