CF907B Tic-Tac-Toe

题目背景

两头熊在玩一个游戏。 这个游戏的棋盘是由9个大方格排成$3\*3$的形式,每个大方格中有9个小方格,也是排成$3\*3$的形式。一个熊执x棋,一个执o棋。第一步由执x棋的熊下,可以下在任意一个小方格中,然后从第二步开始,上一个熊把棋下在的小方格在它所属的$3\*3$小方格中的对应位置,这头熊需要下在3\*3的大方格的对应位置大方格中的9个小方格中的一个。比如上一头熊下到了(6,4)(6,4)位置,(6,4)(6,4)位属于中间的那个大方格,在中间那个大方格的9个小方格中属于左下位,下一步就必须下到9个大方格的左下位的那个大方格中的9个小方格中的一个(样例1)。但是如果这9个小方格已经都被下过棋子了,那么就可以从其他地方任选一个小格子下棋(样例2)。 给定一个棋盘,上面有当前已经下完的棋子,再给出最后一步的坐标,要求在棋盘上下一步可以下的位置上打出"!"(无引号)

题目描述

两只熊正在通过邮件下井字棋。不过,普通的井字棋对它们来说太无聊了,所以它们正在玩一种改版的井字棋,其规则如下: 游戏在如下的棋盘上进行。 ![](http://espresso.codeforces.com/9f2cb44894dfaba91b9e381419482b55cfe9ff63.png) 玩家轮流下棋。第一个回合,玩家可以将自己的棋子放在任意一个小棋盘的任意格子中。之后的每一步有如下限制:如果在上一步中,对手将棋子下在某个小棋盘中的坐标为 $(x_{l},y_{l})$ 的格子里,则下一步必须在大棋盘的坐标为 $(x_{l},y_{l})$ 的那个小棋盘内的某个空格中落子。例如,如果第一步玩家把棋子下在中央棋盘的左下角格子,那么第二名玩家下一步必须选择左下角小棋盘的某个格子落子(参考第一个样例)。如果规定的小棋盘没有空格了,则玩家可以在整个大棋盘的任意空格落子。 现给定棋局当前状态以及最后一步落子的位置。请你指出当前玩家所有可以落子的格子。 在森林中,一只兔子做邮递员,喜欢恶作剧熊猫,有时候会擅自更改棋局状态,所以当前状态可能并非通过正常游戏流程出现。不过,无论如何,最后一步落子的位置一定不是空的。你无需判断当前状态是否可达,只需根据规则输出当前玩家可以下棋的位置即可。

输入格式

前 11 行描述一个 $9 \times 9$ 的棋盘,被空行和空格用于划分成 $9$ 个小棋盘。每个小棋盘由 9 个字符描述,没有空格和空行。字符 "x" 表示第一名玩家的棋子,字符 "o" 表示第二名玩家的棋子,字符 "." 表示空格。 棋盘后面一行包含两个整数 $x$ 和 $y$($1 \leq x, y \leq 9$),表示最后一次落子的单元格在大棋盘中的坐标。棋盘的行从上到下编号,列从左到右编号。 保证最后一次落子的位置不为 "."。同时保证整个棋盘上至少有一个空格。当前棋局状态不一定是正常棋局能达到的。

输出格式

输出与输入格式相同的棋盘,将所有当前玩家可以落子的格子用 "!" 号表示,其余位置不变。

说明/提示

在第一个样例中,第一名玩家刚刚走了中央棋盘的左下角格子,因此第二名玩家只能在左下角小棋盘内进行落子。 在第二个样例中,最后一步落子发生在下方中间小棋盘的左上角,但左上角小棋盘已经没有空格,因此第二名玩家可以在整个大棋盘的任意空格落子。 在第三个样例中,最后一步落子发生在中央小棋盘的中央格子,但中央小棋盘已经全被占据,因此当前玩家可以在任意位置下棋。注意,这种局面在正常游戏流程中其实不可能出现。 由 ChatGPT 5 翻译