#CCSP2017A. 五子棋

五子棋

时间限制: 1.0 秒

空间限制: 128 MB

题目描述

五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连珠者获胜。

五子连珠是在横线,纵线,斜线,反斜线四个方向上形成五子及以上的连线,当出现多于五子的连珠时,也只记为一次五子连珠。

五子连珠总数等于棋局中的所有方向上的五子连珠连线的数量之和。

我们想知道,给定一个长宽皆为 nn 的棋局,白棋落在哪些点可以增加白棋五子连珠总数

增加白棋五子连珠总数的举例说明(其中 * 点为未落子的点,w 点为已经落下白棋的点,b 为已经落下黑棋的点,A 点为我们本次选择的落点):

wwwwAbbbb

落白棋之前未形成五子连珠,落入白棋之后,五子连珠总数加一,满足要求。

wwwwwAbbbb

落白棋之前已经形成五子连珠,落白棋之后,五子连珠总数不变,不满足要求。

wwwwwAwwwww

落白棋之前五子连珠总数为二,落入白棋之后,两边连成一线,五子连珠总数减一,不满足要求。

*w***w*****		
**w**w*****
***w*w*****
****ww*****
wwwwwAwwwww

落白棋之前五子连珠总数为二。落入白棋之后,两边连成一线,斜向和纵向形成新的五子连珠,总数为三。五子连珠总数加一, 这个点满足要求。 、

输入格式

从标准输入读入数据。

输入为第一行为一个数字 nnn40n \le 40),表示棋盘大小。

接下来的 nn 行,每行为 nn 个字符,可能有三种字符,* 表示无棋子,b 表示黑棋,w 表示白棋。

输入棋局中可能已经有五子连珠的情况,我们需要计算能增加白棋五子连珠总数的白棋落点。

输出格式

输出到标准输出。

输出为 kk 行,包括 kk 个满足要求的落点,kk 个点按照从左至右, 从上至下的顺序输出, 即先按行排序, 再按列排序输出。

每行为一个点坐标 x yx~y,分别表示列坐标, 行坐标, 以空格分隔,坐标序号从 00 开始,棋盘左上角为原点。

*a***
*****
*****
*****
***b*

该图中 aa 点的坐标为 (1,0)(1,0)bb 点的坐标为 (3,4)(3,4)

8
****b*bb
*****b*b
bb*bbbw*
w*wbwwww
bwwbwwbw
ww**wbbw
*bww***w
***bwb*b

7 2
2 5
3 5
4 6
2 7

子任务

本题共 2020 个测试点,每个测试点 55 分。

测试点编号 说明
121\sim 2 没有满足要求的点
383\sim 8 只需要计算横纵方向,棋局中不存在旧的五子连珠
9149\sim 14 需要计算所有方向,棋局中不存在旧的五子连珠
152015\sim 20 盘面上存在旧的五子连珠