8자 새기기

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

요약
한 줄을 공유하는 두 축 정렬 사각형의 테두리를 모두 흠 없는 칸으로 그을 때, 두 내부 넓이의 곱의 최댓값을 구한다.
난이도

어려움10점 중 8점

유형
누적 합, 구현, 완전 탐색, 그리디
정답자
아직 제출이 없습니다

문제

농부 존의 소들이 커다란 정사각형 대리석 판을 받았는데, 아쉽게도 군데군데 흠집이 있습니다. 이 판은 N×NN \times N 격자(5≤N≤3005 \le N \le 300)로 나타내며, *는 흠집이 있는 칸을, .는 흠집이 없는 매끈한 칸을 뜻합니다.

소들은 숫자 8을 좋아해서(네 발마다 갈라진 발굽이 있어 "발가락"으로 8까지 셀 수 있습니다) 대리석에 숫자 8을 새기고 싶어 합니다. 숫자 8은 축에 나란한 두 직사각형의 테두리로 그리며, 위쪽 직사각형과 아래쪽 직사각형은 다음 조건을 모두 만족해야 합니다.

  • 두 직사각형은 각각 내부에 적어도 한 칸을 품어야 합니다.
  • 두 직사각형은 하나의 가로선을 공유합니다. 즉 위쪽 직사각형의 아래 변이 아래쪽 직사각형의 위 변 위에 놓이며, 그 위 변의 (같아도 되는) 부분 구간이어야 합니다. 다시 말해 두 변은 같은 행에 있고, 위쪽 직사각형의 좌우 열이 아래쪽 직사각형의 좌우 열 사이(양 끝 포함)에 들어와야 합니다.
  • 두 직사각형의 테두리(네 변 전체)에 해당하는 모든 칸은 흠집이 없어야(.) 합니다. 내부 칸에는 제한이 없어 흠집이 있어도 됩니다.

행 a..ba..b, 열 c..dc..d에 걸친 직사각형이 품는 내부 넓이는 (b−a−1)×(d−c−1)(b - a - 1)\times(d - c - 1)입니다. 숫자 8의 미적 점수는 두 직사각형이 품는 내부 넓이의 곱이며, 소들은 이 값을 최대로 만들고 싶어 합니다.

숫자 8의 예시 모양(8은 새겨진 테두리 칸):

.8888...
.8..8...
88888888
8......8
88888888

새길 수 있는 숫자 8의 미적 점수 중 최댓값을 구하세요. 유효한 숫자 8을 하나도 새길 수 없다면 -1을 출력합니다.

입력

  • 첫째 줄: 대리석 판의 한 변 길이인 정수 NN.
  • 둘째 줄부터 N+1N+1째 줄까지: 각 줄은 *(흠집) 또는 .(매끈한 칸)로 이루어진 NN개의 문자로 대리석의 한 행을 나타냅니다.

출력

  • 테두리에 흠집 칸을 전혀 쓰지 않는 숫자 8의 미적 점수 중 최댓값을 한 줄에 출력합니다. 숫자 8을 만들 수 없다면 -1을 출력합니다.

예제2

  1. 예제 1

    입력
    15
    ...............
    ...............
    ...*******.....
    .*....*.......*
    .*......*....*.
    ....*..........
    ...*...****....
    ...............
    ..**.*..*..*...
    ...*...**.*....
    *..*...*.......
    ...............
    .....*..*......
    .........*.....
    ...............
    
    예상 출력
    3888
    
  2. 예제 2

    입력
    5
    .....
    .....
    .....
    .....
    .....
    
    예상 출력
    9