一年一度的船长联谊大会开始了,杰克作为资深老船长负责本次大会的具体工作事宜。
为了让船长们增强沟通,达到联谊的目的,杰克将船长们安排到了一个 N \times M 的矩阵中落座。并在部分没有坐人的位置上,放了一些黄金,船长们对黄金没有任何抵抗力,垂涎欲滴。
杰克宣布大会的第一项活动,每个船长可以从自己的座位,尝试沿着上下左右四个方向移动一步,到相邻的座位(比如:哈里船长坐在 x,y 的位置,那么他可以尝试移动到 x-1,y、x+1,y、x,y-1、x,y+1 这 4 的位置,当然哈里船长不能移出矩阵的范围);
如果两位船长在有黄金的位置相遇,那么两位船长可以就本年度的航海活动深入交流,形成两船联盟,当然他们会顺便瓜分座位上的黄金,因此同一个座位上的黄金只能成为一对船长联盟的见证;同一对船长一旦在某个座位瓜分黄金后联盟,则不允许再去瓜分其他座位的黄金,这样可以让更多的船长形成两船联盟的关系。
请编程计算出,根据给定的座位图,最多有多少对船长能够形成两船联盟的关系。
第 1 行包含 2 个整数 N 和 M,表示矩阵的大小;
接下来 N 行,每行有 M 个字符,表示座位图的具体分布;
在座位图的分布中:字符 C
代表该位置留给某个船长(captain),字符 G
代表该位置放有黄金(gold),字符 .
代表该位置空置,既没有船长落座,也没有黄金。
输出一个整数,代表活动结束后,能够形成两船联盟的船长对数。
3 3 .CG .GC .CG
3
3 4 CGC. GCCG CCGC
4
位于 1,2 点和位于 2,3 点的船长,可以通过位于 1,3 点的黄金结盟;
位于 1,2 点和位于 3,2 点的船长,可以通过位于 2,2 点的黄金结盟;
位于 2,3 点和位于 3,2 点的船长,可以通过位于 3,3 点的黄金结盟;
对于 20\% 的数据,N=2,1 \le M \le 1000;
对于 100\% 的数据,1 \leq N,M \leq 1000。
东方博宜OJ月赛