306465: CF1201E1. Knightmare (easy)

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

Description

Knightmare (easy)

题意翻译

**这是一道交互题。** Alice 和 Bob 在一个 n×m 的棋盘上玩一种游戏(**n,m 均为偶数**)。棋盘的每一行和每一列分别用数字 1 到 n 和 1 到 m 标记。棋盘上有两个马。白马最初在(**x1, y1**)上,黑马最初在(**x2, y2**)上。 Alice 先选其中一个马, Bob 则会选另一个进行游戏。 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 <= n,m <= 40) 第二行读入四个正整数 x1, y1, x2, y2 (1 <= x1, x2 <= n, 1 <= y1, y2 <= m). 数据保证两个马的初始位置不同,且一开始两个马都不在它们自己的目标位置(不过它们可以在对手的目标位置上)。 你的程序应输出一行 `WHITE` 或者 `BLACK`以说明你决定选哪一方的马。(再次注意:白方先下。) 每一回合中,你都应输出两个正整数 x 和 y, 表示 你的马每次移动到的位置。如果你在本轮就赢了,你应该马上终止程序。 在对手每一次移动后, 你会收到两个正整数 x 和 y, 表示 Bob 的马每次移动到的位置。 如果你作出了一次非法移动或者裁判判定你输了, 亦或是你走了350步但还没赢, 你会收到两个数字 `-1 -1`. 这时, 你应该终止程序, 然后你就WA了。 每打印一行结果, **记得输出EOL然后刷新缓冲区。** 下面是一些示例: ``` // C++ fflush(stdout); // #1 cout.flush(); // #2 // Java System.out.flush(); // Pascal flush(output); # Python stdout.flush() // 其他语言自己看文档 ``` (这个题不允许Hack. 裁判的程序是自适应的;裁判的走法可能随你的程序的走法的变化而变化。) ## 样例说明 样例1中,白马可以在一步之内到达目标位置。 样例2中,不管白马怎么走,黑马总会赢。

题目描述

This problem only differs from the next problem in constraints. 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 40 $ , $ 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×m 的棋盘上玩一种游戏(**n,m 均为偶数**)。棋盘的每一行和每一列分别用数字 1 到 n 和 1 到 m 标记。棋盘上有两个马。白马最初在(**x1, y1**)上,黑马最初在(**x2, y2**)上。 Alice 先选其中一个马, Bob 则会选另一个进行游戏。 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 <= n,m <= 40) 第二行读入四个正整数 x1, y1, x2, y2 (1 <= x1, x2 <= n, 1 <= y1, y2 <= m). 数据保证两个马的初始位置不同,且一开始两个马都不在它们自己的目标位置(不过它们可以在对手的目标位置上)。 你的程序应输出一行 `WHITE` 或者 `BLACK`以说明你决定选哪一方的马。(再次注意:白方先下。) 每一回合中,你都应输出两个正整数 x 和 y, 表示 你的马每次移动到的位置。如果你在本轮就赢了,你应该马上终止程序。 在对手每一次移动后, 你会收到两个正整数 x 和 y, 表示 Bob 的马每次移动到的位置。 如果你作出了一次非法移动或者裁判判定你输了, 亦或是你走了350步但还没赢, 你会收到两个数字 `-1 -1`. 这时, 你应该终止程序, 然后你就WA了。 每打印一行结果, **记得输出EOL然后刷新缓冲区。** 下面是一些示例: ``` // C++ fflush(stdout); // #1 cout.flush(); // #2 // Java System.out.flush(); // Pascal flush(output); # Python stdout.flush() // 其他语言自己看文档 ``` (这个题不允许Hack. 裁判的程序是自适应的;裁判的走法可能随你的程序的走法的变化而变化。) ## 样例说明 样例1中,白马可以在一步之内到达目标位置。 样例2中,不管白马怎么走,黑马总会赢。

加入题单

算法标签: