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

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

L자 모양 도형

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

요약
0과 1로 이루어진 격자에서 L자 모양의 개수를 센다. L자 모양은 한 끝점을 공유하는 서로 수직인 두 개의 1로만 된 선분이며, 각각 길이가 2 이상이고 긴 쪽이 짧은 쪽의 정확히 두 배다.
난이도

보통10점 중 6점

유형
배열, 구현, 누적 합, 행렬
정답자
아직 제출이 없습니다

문제

R개의 행과 C개의 열로 이루어진 격자가 있고, 각 칸은 0 또는 1이다.

선분은 같은 행이나 같은 열에 연속으로 놓인 비어 있지 않은 칸들의 나열이다. 선분의 길이는 그 나열에 속한 칸의 개수로 정의한다.

선분에 속한 모든 칸이 1이면 그 선분을 "좋은" 선분이라고 한다.

"L자 모양"은 다음 조건을 모두 만족하는 두 선분의 순서 없는 쌍으로 정의한다.

  • 두 선분은 각각 "좋은" 선분이어야 한다.
  • 두 선분은 서로 수직이어야 한다.
  • 두 선분은 양쪽 모두의 끝점인 칸 하나를 공유해야 한다.
  • 두 선분의 길이는 각각 2 이상이어야 한다.
  • 긴 선분의 길이는 짧은 선분의 길이의 두 배여야 한다.

격자에 있는 L자 모양의 개수를 구하시오.

아래는 올바른 L자 모양 두 가지 예시이다.

그리고 아래는 잘못된 L자 모양 세 가지 예시이다.

왼쪽 도형에서는 두 선분이 공통 끝점을 공유하지 않는다. 가운데 도형은 두 선분의 길이가 같고, 오른쪽 도형은 긴 선분이 짧은 선분의 두 배보다 길어서 둘 다 마지막 조건을 만족하지 않는다.

입력

입력의 첫 줄에는 테스트 케이스의 수 T가 주어진다. 그 뒤에 T개의 테스트 케이스가 이어진다.

각 테스트 케이스의 첫 줄에는 두 정수 R과 C가 주어진다.

그다음 R개의 줄에 걸쳐 각 줄에 C개의 정수가 주어지며, 격자의 칸을 나타낸다.

출력

각 테스트 케이스마다 Case #x: y 형식의 한 줄을 출력한다. x는 테스트 케이스 번호(1부터 시작)이고, y는 L자 모양의 개수이다.

제한

  • 1 ≤ T ≤ 100.
  • 격자는 0과 1로만 이루어진다.

힌트

샘플 케이스 1에는 L자 모양이 하나 있다.

  • 첫 번째 L자 모양은 (1,1), (2,1), (3,1), (4,1), (4,2) 칸으로 이루어진다.

샘플 케이스 2에는 L자 모양이 아홉 개 있다.

  • 첫 번째 L자 모양은 (1,1), (2,1), (3,1), (4,1), (5,1), (6,1), (6,2), (6,3) 칸으로 이루어진다.
  • 두 번째 L자 모양은 (3,1), (4,1), (5,1), (6,1), (6,2) 칸으로 이루어진다.
  • 세 번째 L자 모양은 (6,1), (5,1), (4,1), (3,1), (3,2) 칸으로 이루어진다.
  • 네 번째 L자 모양은 (3,3), (4,3), (5,3), (6,3), (6,2) 칸으로 이루어진다.
  • 다섯 번째 L자 모양은 (6,3), (5,3), (4,3), (3,3), (3,2) 칸으로 이루어진다.
  • 여섯 번째 L자 모양은 (3,1), (3,2), (3,3), (3,4), (2,4) 칸으로 이루어진다.
  • 일곱 번째 L자 모양은 (3,4), (3,3), (3,2), (3,1), (2,1) 칸으로 이루어진다.
  • 여덟 번째 L자 모양은 (3,4), (3,3), (3,2), (3,1), (4,1) 칸으로 이루어진다.
  • 아홉 번째 L자 모양은 (6,3), (5,3), (4,3), (3,3), (3,4) 칸으로 이루어진다.

처음 세 L자 모양은 아래 그림에 나와 있다.

예제1

  1. 예제 1

    입력
    2
    4 3
    1 0 0
    1 0 1
    1 0 0
    1 1 0
    6 4
    1 0 0 0
    1 0 0 1
    1 1 1 1
    1 0 1 0
    1 0 1 0
    1 1 1 0
    
    예상 출력
    Case #1: 1
    Case #2: 9