三子棋
题号:NC246823
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定一个 的棋盘,共有 个格子,初始时每个格子均没有放置棋子。

A 和 B 轮流行动,每次行动的人,必须在当前棋盘上选择一个没有放置棋子的格子,然后在该格子放置一个棋子。

若某棋手放置一个棋子后,该棋子与另外两个棋子(不论是谁放置的都可以)达成三子连珠(即三个棋子连成一条线,水平、垂直、主副对角线均可),则该棋手获胜。

A 总是先手。

请判断,若 A 将第一个棋子放置于格子 (x, y) 后,是否 A 最终会获胜(A,B 总是采取最优策略)。

下标从 1 开始,处在第 x 行、第 y 列的格子坐标为 (x, y)

输入描述:

第一行输入两个正整数 ,以空格相隔,表示 A 第一个棋子放置的格子坐标。

输出描述:

若 A 将第一个棋子放置于格子 (x, y) 后,A 最终会获胜,则输出 "YES"(不含引号),否则输出 "NO"(不含引号)。
示例1

输入

复制
2 2

输出

复制
YES

备注:

若 A 将第一个格子置于 (2, 2) 处,即棋盘中心,那么无论下一个棋子 B 放在何处,A 都可以再落一子达成三点共线获胜。于是,输出 "YES"(不含引号)。
(上图 A1, B1, A2 分别表示 A B 的轮流行动,可以看到,A2 落下时,A 获胜)