아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

그라디언트 광산 찾기

시간 제한10초메모리 제한128 MB

요약
회색조 격자가 주어질 때 값이 세로, 가로, 또는 대각선 방향으로 균일하게 변하는 가장 큰 정사각형 부분 격자를 찾아 그 넓이를 출력한다.
난이도

어려움10점 중 9점

유형
동적 계획법, 구현, 배열, 행렬
정답자
아직 제출이 없습니다

문제

외계인의 침공 가능성에 대비하려면, 먼저 그들이 어디에서 올 수 있는지 알아내야 한다. 어떤 행성에 지적 생명체가 살고 있는지 판단하는 한 가지 방법은, 그 행성의 고해상도 사진을 분석해 지적 생명체가 남긴 특징적인 흔적을 찾는 것이다. 후보 행성이 매우 많기 때문에 이 작업은 컴퓨터 프로그램으로 수행해야 한다.

문명이 자리 잡은 행성의 두드러진 특징 중 하나는 지표면에 있는 광산이다. 광산은 정사각형 모양의 구조물로, 그 깊이가 정사각형의 한 변에서 맞은편 변으로 갈수록 일정하게 변한다. 따라서 흑백 사진에서 광산은 명암이 일정하거나, 한 방향에서 반대 방향으로 점진적이고 균일하게 변하는 정사각형으로 나타난다.

당신의 임무는 어떤 행성의 흑백 비트맵 사진에서 가장 큰 광산을 찾는 것이다. 사진은 00 이상 6553565535 이하의 정수로 이루어진 직사각형 격자이며, Ai,jA_{i,j} 는 ii 번째 행, jj 번째 열에 있는 픽셀의 명암(회색조)을 나타낸다. 특정한 몇 가지 방향으로 놓인 정사각형 광산만 고려한다.

변의 길이가 LL 인 축에 평행한 정사각형은 r≤i≤r+L−1r \le i \le r+L-1 이고 c≤j≤c+L−1c \le j \le c+L-1 인 픽셀 Ai,jA_{i,j} 들의 블록이다.

이러한 정사각형은, 어떤 정수 SS 와 KK 에 대해 명암이 다음 네 가지 그라디언트 패턴 중 하나를 따를 때 광산이 된다.

  • 행 그라디언트(세로 광산): Ai,j=S+iKA_{i,j} = S + iK — 명암이 행 번호에만 의존한다.
  • 열 그라디언트(가로 광산): Ai,j=S+jKA_{i,j} = S + jK — 명암이 열 번호에만 의존한다.
  • 대각선 그라디언트: 어떤 Q∈{+1,−1}Q \in \{+1, -1\} 에 대해 Ai,j=S+(i+Qj)KA_{i,j} = S + (i + Qj)K — 명암이 두 대각선 방향 중 하나를 따라 일정하다.

픽셀 하나짜리 정사각형은 언제나 (자명한) 광산이다.

입력

입력에는 여러 개의 사진이 주어진다. 각 사진은 두 정수 NN 과 MM (1≤N,M≤20001 \le N, M \le 2000)이 적힌 줄로 시작하며, 이는 각각 사진의 높이와 너비이다. 이어지는 NN 개의 줄에는 각각 MM 개의 정수가 있고, 그중 ii 번째 줄의 jj 번째 정수는 ii 번째 행, jj 번째 열 픽셀의 명암 Ai,jA_{i,j} (0≤Ai,j≤655350 \le A_{i,j} \le 65535)이다. 한 줄의 정수들은 하나 이상의 공백으로 구분되며, 숫자 사이나 줄의 처음과 끝에 공백이 더 있을 수도 있다.

사진 목록은 두 개의 00 이 적힌 줄로 끝나며, 이 줄은 사진이 아니므로 처리하지 않는다.

출력

각 사진에 대해, 그 사진에서 가장 큰 행 그라디언트, 열 그라디언트, 또는 대각선 광산의 넓이(픽셀 개수)를 한 줄에 하나의 정수로 출력한다.

예제4

  1. 예제 1

    입력
    4 4
    10 1 13 20
    18 9 11 13
    5 7 9 6
    6 5 7 7
    3 3
    10 1 13
    18 9 11
    5 1000 9
    4 4
    10 12 15 20
    5 9 13 10
    5 9 13 6
    5 9 13 7
    0 0
    
    예상 출력
    4
    1
    9
    
  2. 예제 2

    입력
    3 3
    7 7 7
    7 7 7
    7 7 7
    0 0
    
    예상 출력
    9
    
  3. 예제 3

    입력
    4 4
    2 2 2 2
    5 5 5 5
    8 8 8 8
    11 11 11 11
    0 0
    
    예상 출력
    16
    
  4. 예제 4

    입력
    3 3
    0 1 2
    1 2 3
    2 3 4
    0 0
    
    예상 출력
    9