AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

P2710. 围棋的气

中等通过率 60% · 提交 366 · 通过 220
哈希表模拟枚举哈希集合

小慕最近在学习围棋,他发现围棋棋盘由纵横各19条线垂直相交组成,棋盘上一共19x19=361个交点,对弈双方一方执白棋,一方执黑棋,落子时只能将棋子置于交点上。 “”是围棋中很重要的一个概念,某个棋子有几口气,是指其上下左右方向四个相邻的交叉点中,有几个交叉点没有棋子,由此可知: 1、在棋盘的边缘上的棋子最多有3口气(黑1),在棋盘角点的棋子最多有2口气(黑2),其它情况最多有4口气(白1) 2、如果多个相同颜色的棋子连在一起,那么这些棋子会共享它们的气,即这些棋子共同的气的总数,等于这些棋子上下左右方向所有相邻的交叉点中,没有棋子的交叉点的总数(注意:这些棋子本身占据的交叉点不算在内,并且这些棋子共同占据的交叉点相邻的交叉点中,如果有相同颜色的棋子,那么这些交叉点也不会计入气中,因为它们是棋子的一部分,而不是气)。下图中的黑棋三子连在一起,共同的气共有7口(图中标记为X的位置) 3、如果某块棋子(可能是单个或多个棋子)的气数为0,那么这些棋子就处于无气状态,应当立即被从棋盘上提走。提走棋子后,可能会使得其它棋子获得新的气。 现在,小慕遇到了一个问题:给定一个围棋棋盘上若干棋子的分布,他想知道棋盘上所有棋子各自的气数分别是多少。注意,这里的棋子气数是针对每一个单独的棋子而言的,即每个棋子所在连通块的气数,就是该棋子自身的气数。

提示:带虚线的词点一下有通俗解释。

输入描述

<p> 输入包括两行数据,如: </p> <p> 0 5 8 9 9 10 </p> <p> 5 0 9 9 9 8 </p> <p> 1、每行数据以空格分隔,数据个数是2的整数倍,每两个数是一组,代表棋子在棋盘上的坐标 </p> <p> 2、坐标的原点在棋盘左上角点,第一个值是行号,范围从0到18;第二个值是列号,范围从0到18 </p> <p> 3、举例说明:第一行数据表示三个坐标(0, 5)、(8, 9)、(9, 10) </p> <p> 4、第一行表示黑棋的坐标,第二行表示白棋的坐标。 </p> <p> 5、题目保证输入两行数据,无空行且每行按前文要求是偶数个,每个坐标不会超出棋盘范围。 </p>

输出描述

8 7 两个数字以空格分隔,第一个数代表黑棋的气数,第二个数代表白棋的气数。

示例

示例 1

输入

0 5 8 9 9 10
5 0 9 9 9 8

输出

8 7

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
黑棋 ● 白棋 ○ ● 气(空位) 计算所有黑棋的 气(不重复) 同理计算白棋。
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「围棋的气」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。