1. 矩阵仅由'A'、'B'、'C'三种字符组成。且三种字符都出现过。
2. 矩阵相邻的字符都不相等。
现在给定一个
第一行输入两个整数,代表矩阵的行数和列数。
接下来的行,每行输入一个仅包含大写字母的长度为
的字符串。
输出一个整数表示答案。
4 4 DABC ABAB BABA BBAB
1
有4个3*3的子矩阵。
左上角的子矩阵出现了'D',因此不合法。
右上角的是好矩阵。
左下角的存在两个相邻的字母相同,因此不合法。
右下角的子矩阵里没有'C',因此不合法。
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2023/11/3 19:34 # @Author : lanlin # 小美的好矩阵 def judge33(matrix, y, x): result = True flag_x = [-1, 0, 1, -1, 0, 1, -1, 0, 1] flag_y = [-1, -1, -1, 0, 0, 0, 1, 1, 1] flag_ABC = set() for i in range(len(flag_y)): xx = x+flag_x[i] yy = y+flag_y[i] temp = matrix[yy][xx] # 判断三种字符是否都出现过,且没有其他字符 if temp in ['A','B','C']: flag_ABC.add(temp) else: return False # 判断字符重复,每个元素只需判断其下、右两元素即可 if (yy+1)<(y+2) and temp == matrix[yy+1][xx]: return False if (xx+1)<(x+2) and temp == matrix[yy][xx+1]: return False if len(flag_ABC) != 3: result = False return result def judge(data, m, n): result = 0 for y in range(m-2): for x in range(n-2): if judge33(data, y+1, x+1): result += 1 return result if __name__=='__main__': array1 = input().split(" ") m = int(array1[0]) n = int(array1[1]) data_array = [] for i in range(m): temp_list = list(input()) data_array.append(temp_list) print(judge(data_array, m, n)) ''' 4 4 DABC ABAB BABA BBAB '''将矩阵化成一个一个的小块,然后根据题目要求进行判断,注意行列顺序
from collections import Counter def isGoodMatrix(mtx,idx,idy): arr = [] for i in range(3): for j in range(3): arr.append(mtx[idx+i][idy+j]) # 判断条件二 矩阵相邻的字符都不相等。 if i<2: if mtx[idx+i][idy+j] == mtx[idx+i+1][idy+j]: return False if j<2: if mtx[idx+i][idy+j] == mtx[idx+i][idy+j+1]: return False # 判断条件一 矩阵仅由'A'、'B'、'C'三种字符组成。且三种字符都出现过。 temp = set(arr) if len(temp)!=3&nbs***bsp;'A' not in temp&nbs***bsp;'B' not in temp&nbs***bsp;'C' not in temp: return False return True def sol(n,m,mat): if n<3&nbs***bsp;m<3: return 0 ans = 0 for i in range(n-2): for j in range(m-2): if isGoodMatrix(mat,i,j): ans += 1 return ans while 1: try: n,m = map(int,input().split()) arr = [] for i in range(n): s = input().strip() arr.append([x for x in s]) ans = sol(n,m,arr) print(ans) except: break
n,m=[int(i) for i in input().split(' ')] matrix=[] for i in range(n): matrix.append([j for j in input()]) def judge(matrix, row, col): uni_ch=set() for x in range(row,row+3): for y in range(col,col+3): ch=matrix[x][y] uni_ch.add(ch) if ch >= 'D'&nbs***bsp;(y + 1 < col + 3 and ch == matrix[x][y + 1])&nbs***bsp;(x + 1 < row + 3 and ch == matrix[x + 1][y]): return False return len(uni_ch)==3 res=0 for i in range(0,n-2): for j in range(0,m-2): if judge(matrix,i,j): res+=1 print(res)