题解:P14005 棋盘游戏

· · 题解

P14005 棋盘游戏

题目概括

有一个无限大的棋盘上有一个黑子,有两种操作:

&\Huge{\bullet}\\ &\Huge{\bullet \bullet}\\ &\Huge{\bullet \bullet}\\ \\ &\Huge{\ \ \bullet}\\ &\Huge{\bullet \bullet}\\ &\Huge{\bullet \bullet} \end{aligned}

两种操作均可反转五颗棋子的颜色,给出任意次反转后的棋盘中黑子的位置,问刚开始的黑子在哪。

思路

有很多人不太明白这题为什么可以输出任意位置,这里来证明一下。

首先,对于一个空白的区域。

\Huge{\circ \circ}\\ \Huge{\circ \circ}\\ \Huge{\circ \circ}\\ \Huge{\circ \circ}\\ \Huge{\circ \circ} \end{aligned}

我们可以先执行一遍操作一,

\Huge{\circ \circ}\\ \Huge{\bullet \circ}\\ \Huge{\bullet \bullet}\\ \Huge{\bullet \bullet}\\ \Huge{\circ \circ} \end{aligned}

再执行一遍操作二,

\Huge{\circ \circ}\\ \Huge{\bullet \bullet}\\ \Huge{\circ \circ}\\ \Huge{\circ \circ}\\ \Huge{\circ \circ} \end{aligned}

这样就可以凭空生成两个相邻的黑色棋子,并且周围的棋子不受影响。于是我们就可以在两个棋子下方执行相同操作再生成两个黑棋子。

\Huge{\circ \circ}\\ \Huge{\bullet \bullet}\\ \Huge{\bullet \bullet}\\ \Huge{\circ \circ}\\ \Huge{\circ \circ} \end{aligned}

最后只需要在这四个棋子上方执行一次操作一,

\Huge{\bullet \circ}\\ \Huge{\circ \circ}\\ \Huge{\circ \circ}\\ \Huge{\circ \circ}\\ \Huge{\circ \circ} \end{aligned}

哇!我们成功生成了单独的一个黑棋子!

于是对于棋盘上任意一个点,我们都可以用这个方法反转任意位置的棋子,那给出的黑棋子就一点意义都没有了。

代码

由于上述原理,我们甚至不用读入就可以通过这道题。

#include <bits/stdc++.h>
using namespace std;

int main(){
    cout << 10000000 << " " << 10000000;
}