만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

대칭 격자

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

요약
열의 개수가 짝수인 부분 격자 중 세로 중심선을 기준으로 좌우가 대칭인 것의 개수를 구합니다.
난이도

보통10점 중 6점

유형
행렬, 문자열, 스택
정답자
아직 제출이 없습니다

문제

N×MN \times M 크기의 격자 AA가 주어진다. 격자의 ii행 jj열 칸에는 알파벳 대문자 Ai,jA_{i,j}가 적혀 있다.

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

  • 1개 이상의 행과 2개 이상의 짝수 개수의 열을 포함한다.
  • 격자의 정가운데 세로축을 기준으로 격자를 접었을 때 서로 맞닿는 문자가 모두 같다.
    • 구체적으로, 크기가 r×2cr \times 2c인 격자 BB에서 1≤i≤r1 \le i \le r, 1≤j≤c1 \le j \le c를 만족하는 모든 (i,j)(i, j)에 대해 Bi,j=Bi,2c+1−jB_{i,j} = B_{i,2c+1-j}이다.

격자 AA에서 연속한 행들과 연속한 열들을 골라 만들 수 있는 부분 격자 중, 대칭 격자인 것의 개수를 구하라.

입력

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

다음 NN개의 줄에는 Ai,1,Ai,2,⋯ ,Ai,MA_{i,1}, A_{i,2}, \cdots, A_{i,M}이 공백 없이 주어진다. Ai,jA_{i,j}는 격자 AA의 ii행 jj열에 적힌 문자이며, 알파벳 대문자 중 하나이다.

출력

격자 AA의 부분 격자 중 대칭 격자인 것의 개수를 출력한다.

힌트

이 문제는 Python3로 통과한다고 보장할 수 없다. Python을 쓴다면 문법은 같으면서 보통 더 빠르게 동작하는 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