306466: CF1201E2. Knightmare (hard)

Memory Limit:256 MB Time Limit:3 S
Judge Style:Text Compare Creator:
Submit:0 Solved:0

Description

Knightmare (hard)

题意翻译

**这是一道交互题。** $Alice$和$Bob$在一个$n\times m$的国际象棋棋盘上玩游戏(保证$n,m$均为正偶数)。行被编为$1,...,n$号,列被编为$1,...,m$号。有两匹马,一匹白一匹黑,白马在$(x_1,y_1)$处,黑马在$(x_2,y_2)$处。按照女士优先的国际惯例,$Alice$有权挑一匹自己的马,$Bob$则使用另外那匹马。按国际象棋规则,白方先手,两个人轮流动自己的马。马按如下规则移动:设马目前在$(x,y)$,则下一步马可以移动到$(x+1,y+2),(x+1,y-2),(x-1,y+2),(x-1,y-2),(x+2,y+1),(x+2,y-1),(x-2,y+1),(x-2,y-1)$这些位置上(当然必须保证在棋盘内部)。 常识告诉我们,马在中间时威力最大。两匹马各有一个目标点,白马目标点是$(n/2,m/2)$,黑马目标点是$(n/2+1,m/2)$。一方获胜当且仅当发生了下面情况至少之一: - 吃掉对方的马(也就是把自己的马走到对方的马目前所在的位置) - 走到自己的目标点,并且对方的马不能立刻吃掉自己的马 当然可能因为各种原因一直无人获胜。如果$Alice$移动了$350$步还是没人获胜,那么两人就算平局。 $Alice$向你求助。请你帮她选一匹马并赢得比赛。可以证明,$Alice$有必胜策略。 【输入输出格式】 **这是一道交互题。** 你需要先读入两个正偶数$n,m(6\leq n,m\leq 1000)$,代表棋盘的长和宽。接下来需要再读入四个正整数$x_1,y_1,x_2,y_2(1\leq x_1,x_2\leq n,1\leq y_1,y_2\leq m$,表示初始时两匹马的位置。 这时你应该输出一行$WHITE$或$BLACK$,代表你所选择的马。如果选择的时白马,整个游戏将由你开始。 接下来就是游戏时间。当轮到你移动时,请输出一行,包含两个以空格隔开的正整数$x,y$,代表你将马所移到的位置。如果你在走这步后获胜,请终止程序。 轮到$Bob$移动时,你将会读到两个正整数$x,y$,表示$Bob$将马所移到的位置。特别地,如果你的移动不合法,或者已经移动$350$而没有获胜使得游戏平局,那么你将读入两个$-1$。此时你应该终止程序(然后接受$WrongAnswer$的审判)。 作为交互题的惯例,请在输出任何东西后清空缓存。具体见各种语言的文档。 请注意:**交互器是有适应能力的**,也就是说,它的招数可能会随着你的招数的变化而变化。

题目描述

This is an interactive problem. Alice and Bob are playing a game on the chessboard of size $ n \times m $ where $ n $ and $ m $ are even. The rows are numbered from $ 1 $ to $ n $ and the columns are numbered from $ 1 $ to $ m $ . There are two knights on the chessboard. A white one initially is on the position $ (x_1, y_1) $ , while the black one is on the position $ (x_2, y_2) $ . Alice will choose one of the knights to play with, and Bob will use the other one. The Alice and Bob will play in turns and whoever controls the white knight starts the game. During a turn, the player must move their knight adhering the chess rules. That is, if the knight is currently on the position $ (x, y) $ , it can be moved to any of those positions (as long as they are inside the chessboard): $ (x+1, y+2) $ , $ (x+1, y-2) $ , $ (x-1, y+2) $ , $ (x-1, y-2) $ , $ (x+2, y+1) $ , $ (x+2, y-1) $ , $ (x-2, y+1) $ , $ (x-2, y-1) $ . We all know that knights are strongest in the middle of the board. Both knight have a single position they want to reach: - the owner of the white knight wins if it captures the black knight or if the white knight is at $ (n/2, m/2) $ and this position is not under attack of the black knight at this moment; - The owner of the black knight wins if it captures the white knight or if the black knight is at $ (n/2+1, m/2) $ and this position is not under attack of the white knight at this moment. Formally, the player who captures the other knight wins. The player who is at its target square ( $ (n/2, m/2) $ for white, $ (n/2+1, m/2) $ for black) and this position is not under opponent's attack, also wins. A position is under attack of a knight if it can move into this position. Capturing a knight means that a player moves their knight to the cell where the opponent's knight is. If Alice made $ 350 $ moves and nobody won, the game is a draw. Alice is unsure in her chess skills, so she asks you for a help. Choose a knight and win the game for her. It can be shown, that Alice always has a winning strategy.

输入输出格式

输入格式


输出格式


The interaction starts with two integers $ n $ and $ m $ ( $ 6 \le n,m \le 1000 $ , $ n $ and $ m $ are even) — the dimensions of the chessboard. The second line contains four integers $ x_1, y_1, x_2, y_2 $ ( $ 1 \le x_1, x_2 \le n $ , $ 1 \le y_1, y_2 \le m $ ) — the positions of the white and the black knight. It is guaranteed that the two knights have different starting positions. It is also guaranteed that none of the knights are in their own target square in the beginning of the game (however, they can be on the opponent's target position). Your program should reply with either "WHITE" or "BLACK", depending on the knight you want to play with. In case you select the white knight, you start the game. During every your turn, you need to print two integers: $ x $ and $ y $ , the position to move the knight. If you won the game by this turn, you must terminate your program immediately. After every turn of the opponent, you will receive two integers: $ x $ and $ y $ , the position where Bob moved his knight. If your last move was illegal or you lost the game after jury's turn, or you made $ 350 $ moves, and haven't won, you will receive "-1 -1". In such cases, you should terminate your program and then you will get a Wrong Answer verdict. After printing anything, do not forget to output the end of line and flush the output. Otherwise, you might get Idleness limit exceeded. To do this, use: - fflush(stdout) or cout.flush() in C++; - System.out.flush() in Java; - flush(output) in Pascal; - stdout.flush() in Python; - see documentation for other languages. Hacks are disabled for this problem. Jury's program is adaptive: the moves of jury may depend on the moves made by your program.

输入输出样例

输入样例 #1

8 8
2 3 1 8

输出样例 #1

WHITE
4 4

输入样例 #2

6 6
4 4 2 2
6 3

输出样例 #2

BLACK
4 3

说明

In the first example, the white knight can reach it's target square in one move. In the second example black knight wins, no matter what white knight moves.

Input

题意翻译

**这是一道交互题。** $Alice$和$Bob$在一个$n\times m$的国际象棋棋盘上玩游戏(保证$n,m$均为正偶数)。行被编为$1,...,n$号,列被编为$1,...,m$号。有两匹马,一匹白一匹黑,白马在$(x_1,y_1)$处,黑马在$(x_2,y_2)$处。按照女士优先的国际惯例,$Alice$有权挑一匹自己的马,$Bob$则使用另外那匹马。按国际象棋规则,白方先手,两个人轮流动自己的马。马按如下规则移动:设马目前在$(x,y)$,则下一步马可以移动到$(x+1,y+2),(x+1,y-2),(x-1,y+2),(x-1,y-2),(x+2,y+1),(x+2,y-1),(x-2,y+1),(x-2,y-1)$这些位置上(当然必须保证在棋盘内部)。 常识告诉我们,马在中间时威力最大。两匹马各有一个目标点,白马目标点是$(n/2,m/2)$,黑马目标点是$(n/2+1,m/2)$。一方获胜当且仅当发生了下面情况至少之一: - 吃掉对方的马(也就是把自己的马走到对方的马目前所在的位置) - 走到自己的目标点,并且对方的马不能立刻吃掉自己的马 当然可能因为各种原因一直无人获胜。如果$Alice$移动了$350$步还是没人获胜,那么两人就算平局。 $Alice$向你求助。请你帮她选一匹马并赢得比赛。可以证明,$Alice$有必胜策略。 【输入输出格式】 **这是一道交互题。** 你需要先读入两个正偶数$n,m(6\leq n,m\leq 1000)$,代表棋盘的长和宽。接下来需要再读入四个正整数$x_1,y_1,x_2,y_2(1\leq x_1,x_2\leq n,1\leq y_1,y_2\leq m$,表示初始时两匹马的位置。 这时你应该输出一行$WHITE$或$BLACK$,代表你所选择的马。如果选择的时白马,整个游戏将由你开始。 接下来就是游戏时间。当轮到你移动时,请输出一行,包含两个以空格隔开的正整数$x,y$,代表你将马所移到的位置。如果你在走这步后获胜,请终止程序。 轮到$Bob$移动时,你将会读到两个正整数$x,y$,表示$Bob$将马所移到的位置。特别地,如果你的移动不合法,或者已经移动$350$而没有获胜使得游戏平局,那么你将读入两个$-1$。此时你应该终止程序(然后接受$WrongAnswer$的审判)。 作为交互题的惯例,请在输出任何东西后清空缓存。具体见各种语言的文档。 请注意:**交互器是有适应能力的**,也就是说,它的招数可能会随着你的招数的变化而变化。

加入题单

算法标签: