Description
一个 n∗m 的棋盘,上面有 k 个棋子,Volodya和 Vlad 开始玩游戏, Volodya 先手,他每次可以选择一个棋子往上下左右走一步,如果某个棋子出了棋盘就算 Volodya 赢, Vlad 每次可以选择一个边界的格子把这个格子的属于边界的边堵住这样 Volodya 就不能把某个棋子从这个边移动出去,问 Volodya 是否可以赢
Input
第一行三个整数 n,m,k 分别表示棋盘行列数和棋子个数,之后 k 行每行两个整数xi,yi表示第 i 个棋子字第xi行第 yi 列 (1≤n,m≤100,0≤k≤100,1≤xi≤n,1≤yi≤m)
Output
如果 Volodya 可以赢则输出 YES ,否则输出 NO
Sample Input
2 2 1 1 2
Sample Output
YES
Solution
只要 Vlad 可以有四步领先,就可以把四个角分别先堵住一条边,这样以来无论 Volodya 怎么走, Vlad 都可以一步步把 Volodya 的路堵死,否则 Volodya 往四个角跑 Vlad 堵不住,故只要判断是否存在一个点其到边界的距离不超过4即可,如果存在则先手必胜,否则先手必败
Code
#include<cstdio> using namespace std; int main() { int n,m,k,x,y; while(~scanf("%d%d%d",&n,&m,&k)) { int flag=0; while(k--) { scanf("%d%d",&x,&y); if(x<=5||x>=n-4||y<=5||y>=m-4)flag=1; } printf("%s\n",flag?"YES":"NO"); } return 0; }