QOJ.ac

QOJ

时间限制: 3 s 内存限制: 256 MB 总分: 100

#6424. 围棋

统计

围棋是一种对抗性游戏,目标是通过棋子围住比对手更多的棋盘区域。游戏的核心概念是“气”,即棋子所在棋组周围的空点(棋盘上横竖线交叉且没有棋子的位置)。

如果一颗棋子(白子或黑子)至少有一口气(直接在上下左右相邻的位置),或者它与另一颗同色的存活棋子处于同一个连通块中,则称该棋子是“存活”的。如果两颗同色棋子在正交方向上相邻,则称它们直接相连。如果存在一个棋子序列 $s_1, s_2, \dots, s_k$,使得对于所有 $1 \le i < k$,$s_{i-1}$ 和 $s_i$ 同色且直接相连,则称两颗同色棋子 $s_1$ 和 $s_k$ 处于同一个连通块中。

例如,在下图中,左侧的两颗白子都不存活,因为它们被周围的黑子捕获;而在右侧,最右边的白子也不存活,即使最左边的黑子也不存活。

给定一个 $n \times n$ 的棋盘,上面可能放置了一些棋子,请计算被黑子捕获的白子数量(即计算不存活的白子数量)。上述示例的结果分别为 2 和 1。

然而,我们的好朋友 Kotori 认为这个问题对聪明的参赛者来说太简单了,所以她想增加难度:要求你独立地翻转每一颗棋子的颜色(即将黑子变为白子,或反之),并求出每次翻转后对应的答案。

“独立翻转”意味着在翻转某颗棋子的颜色之前,其他棋子应恢复到它们的原始颜色。此外,请注意本题中的数据并非来自现实世界,这意味着棋盘大小不一定是 $19 \times 19$,且白子和黑子的数量可以是任意整数。

输入格式

输入包含多组测试数据。第一行包含一个整数 $T$,表示测试数据的组数。对于每组测试数据:

第一行包含一个整数 $n$ ($2 \le n \le 10^3$),表示棋盘边长。

接下来的 $n$ 行,第 $i$ 行包含一个字符串 $s_{i,1}, s_{i,2}, \dots, s_{i,n}$ ($s_{i,j} \in \{'x', 'o', '.'\}$),其中 $s_{i,j} = 'x'$ 表示第 $i$ 行第 $j$ 列的交叉点上有一颗黑子,$s_{i,j} = 'o'$ 表示白子,$s_{i,j} = '.'$ 表示空交叉点。

保证所有测试数据的 $n$ 之和不超过 $5 \times 10^3$。

输出格式

对于每组测试数据,输出一个整数 $E$ 对 $(10^9 + 7)$ 取模的结果,该答案编码如下:

  • 将所有棋子按行号(从上到下)作为第一关键字、列号(从左到右)作为第二关键字进行排序;
  • $E = \sum_{i=1}^{m} (10^6 + 7)^{m-i} a_i$,其中 $m$ 是棋子总数,$a_i$ 是翻转第 $i$ 颗棋子的颜色后,不存活的白子数量。

注意:模数($10^9 + 7$)和基数($10^6 + 7$)是不同的。

样例

输入 1

3
2
.o
..
3
.x.
xoo
ox.
2
oo
oo

输出 1

0
870527216
485539347

说明

对于第二个样例测试数据,按照 $(1, 2), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2)$ 的顺序翻转棋子后,不存活的白子数量分别为 $1, 0, 1, 2, 0, 0$。

对于第三个样例测试数据,棋盘上所有的棋子(无论黑白)均不存活。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.