Symmetry

시간 제한2초메모리 제한1024 MB

요약
연속한 행과 짝수 개의 연속한 열로 이루어진 부분 격자 중 세로 중심축에 대해 대칭인 것의 개수를 센다.
난이도

보통10점 중 7점

유형
해시맵, 문자열, 누적 합, 구현
정답자
아직 제출이 없습니다

문제

N×MN \times M 크기의 격자 AA가 주어진다. 격자의 ii행 jj열에 해당하는 칸에는 알파벳 대문자 A_i,jA\_{i, j}가 쓰여 있다.

다음 조건을 만족하는 격자를 대칭 격자라고 한다.

  • 11개 이상의 행과 22개 이상의 짝수 개 열을 포함하고 있다.
  • 격자의 정 가운데 세로축을 기준으로 격자를 접었을 때 맞닿아 있는 문자가 모두 동일하다.
    • 구체적으로, 어떤 격자 BB의 크기가 r×2cr \times 2c라 했을 때, 1≤i≤r1 \le i \le r; 1≤j≤c1 \le j \le c를 만족하는 모든 (i,j)(i, j)에 대해 B_i,j=B_i,2c+1−jB\_{i, j} = B\_{i, 2c + 1 - j}이다.

주어진 격자 AA에서 연속한 몇 개의 행과 연속한 몇 개의 열을 골라서 만들 수 있는 모든 부분 격자 중, 대칭 격자인 것의 개수를 출력하라.

입력

첫째 줄에 격자 AA의 행 개수 NN과 열 개수 MM이 공백으로 구분되어 주어진다. (2≤N,M≤500)(2 \le N, M \le 500)

다음 NN개의 줄에는 A_i,1,A_i,2,⋯ ,A_i,MA\_{i,1}, A\_{i, 2}, \cdots, A\_{i, M}이 공백 없이 주어진다. A_i,jA\_{i, j}는 격자 AA의 ii행 jj열에 쓰여진 문자를 의미하며, 알파벳 대문자 중 하나이다.

출력

주어진 격자 AA의 연속한 모든 부분 격자 중, 대칭 격자인 것의 개수를 출력한다.

힌트

이 문제는 Python3를 이용하여 풀 수 있음을 보장할 수 없다. Python을 사용한다면, PyPy3가 Python3와 같은 문법을 가지면서 일반적으로 더 빠르게 동작하기에 PyPy3로 제출하는 것을 권장한다.

예제3

  1. 예제 1

    입력
    2 4
    ABBA
    CCCC
    
    예상 출력
    8
    
  2. 예제 2

    입력
    6 8
    AAAAAAAA
    AABBAAAA
    AAAAAAAA
    AABBAAAA
    AAAAAAAA
    CAAAAAAC
    
    예상 출력
    180
    
  3. 예제 3

    입력
    3 3
    ABA
    CDC
    EFE
    
    예상 출력
    0