#include #include #define MIN(x, y) (x>y? y : x) #define FOR(i, n) for(int i=0;i=N || y>=M) { tabl[index][x][y]=0; return 0; } if (tabl[index][x][y]!=-1) return tabl[index][x][y]; if (ossz[x+x2][y]==ossz[x][y] && ossz[x][y]==ossz[x][y+y2]) { tabl[index][x][y]= MIN(fgv(index, x2, y2, x+x2, y, N, M), fgv(index, x2, y2, x, y+y2, N, M))+1; } else tabl[index][x][y]=0; return tabl[index][x][y]; } int solve(int N, int M) { FOR(k, 4) FOR(i, N) { FOR(j, M) { tabl[k][i][j]=-1; } } int out=0; FOR(i, N) { FOR(j, M) { out+=fgv(0, 1,1, i, j, N, M); out+=fgv(1, -1,-1, i, j, N, M); out+=fgv(2, 1,-1, i, j, N, M); out+=fgv(3, -1,1, i, j, N, M); } } return out; } int main() { int N, M; scanf("%d%d\n",&N, &M); FOR(i, N) { FOR(j, M) { scanf("%c",&ossz[i][j]); } scanf("\n"); } //printf("%c\n", ossz[0][0]); printf("%d\n",solve(N, M)); }