""" アルゴリズム概要 ① 1方向だけ接続しているチョコを食べる。 ② 残りに対して、ペアを削除 ③ 独立したチョコを黒白マッチング ④ 残りチョコを食べる """ """入力""" M,N = map(int, input().split()) Choco = [] for i in range(M): Choco.append(list(input())) """チョコの周りに壁(.)を作成(端っこ判定用)""" for i in range(M): Choco[i].insert(0,".") Choco[i].append(".") Choco.insert(0,["."]*(N+2)) Choco.append(["."]*(N+2)) Point = 0 def jud(i,j): """周辺状況を判定する。""" up = 0 down = 0 left = 0 light = 0 dummy = 0 if Choco[i-1][j] == ".": up = 1 if Choco[i+1][j] == ".": down = -1 if Choco[i][j-1] == "." : left = 1 if Choco[i][j+1] == ".": light = -1 if Choco[i][j] == ".": dummy = 100 sum3 = abs(up) + abs(down) + abs(left) + abs(light) + dummy #3だったら1箇所のみ接続 sum4 = abs(up) + abs(down) + abs(left) + abs(light) #独立判定 #print(up,down,left,light,dummy) if sum3 == 3: connect = [i + up + down,j + left + light]#1箇所が接続している場合の3の場合の接続先 else: connect =["*","*"] return (sum3,connect,dummy,sum4) def eat_three(i,j): """ アルゴ①箇所だけ繋がっているものとその先のチョコを食べる""" a = jud(i,j) if a[0] == 3: Choco[i][j] = "." Choco[a[1][0]][a[1][1]] = "." global Point Point += 100 return True def eat_rec(i,j): if Choco[i][j] != ".": if Choco[i][j+1] != ".": Choco[i][j] == "." Choco[i][j+1] =="." global Point Point += 100 def count_wb(i,j): count_w = 0 count_b = 0 if Choco[i][j] != ".": if Choco[i][j] == "w": count_w += 1 else: count_b += 1 return(count_w,count_b) """アルゴ①""" while True: count = 0 for i in range(1,M+1): for j in range(1,N+1): flag = eat_three(i,j) if flag == True: count += 1 # print("アルゴ①",Choco) if count == 0: break #print("アルゴ①:",Point) """アルゴ②""" for i in range(1,M+1): for j in range(1,N+1): eat_rec(i,j) eat_three(i,j) #奇数の場合の対応 #print("アルゴ②:",Point) """アルゴ③④""" wb = [0,0] for i in range(1,M+1): for j in range(1,N+1): #print(jud(i,j)) if (jud(i,j)[3] == 4 and jud(i,j)[2] != 100): wb[0] += count_wb(i,j)[0] wb[1] += count_wb(i,j)[1] #print(wb) diff_wb = wb[0] - wb[1] if diff_wb >= 0: Point += wb[1]*10 + diff_wb #print(Point) else: Point += wb[0]*10 - diff_wb #print("アルゴ③:",Point) print(Point)