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

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

삼각형 세기

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

요약
최대 3000 곱하기 6000개의 꼭짓점을 가진 삼각 격자를 ASCII 그림으로 입력받아, 그려진 수평선과 대각선으로 이루어진 모든 삼각형의 개수를 센다.
난이도

보통10점 중 7점

유형
기하, 완전 탐색, 동적 계획법
정답자
아직 제출이 없습니다

문제

베이징으로 가는 여행에 퍼즐 책을 잔뜩 챙겼다. 그중 상당수에는 그림 1에서 삼각형을 몇 개 찾을 수 있는지 묻는 문제가 실려 있다.

그림 1: 두 번째 예제 입력이 나타내는 그림.

몇 개 풀고 나니 금방 싫증이 났다. 그래서 이런 퍼즐을 알고리즘으로 어떻게 풀지 고민하기 시작한다. 마침 오늘 그 알고리즘이 필요하다.

입력

첫 줄에 그림의 크기를 나타내는 두 정수 r과 c가 주어진다 (1≤r≤30001 \le r \le 3000, 1≤c≤60001 \le c \le 6000). r은 꼭짓점의 행 개수이고, c는 꼭짓점의 열 개수다.

다음 2r−12r-1개 줄이 그림을 나타내며, 각 줄의 길이는 최대 2c−12c-1이다. 홀수 번째 줄에는 꼭짓점(소문자 x)과 0개 이상의 가로 변이 들어가고, 짝수 번째 줄에는 0개 이상의 대각선 변이 들어간다. 4k+14k+1번째 줄은 1, 5, 9, 13, ... 번째 자리에 꼭짓점이 있고, 4k+34k+3번째 줄은 3, 7, 11, 15, ... 번째 자리에 꼭짓점이 있다. 따라서 꼭짓점이 놓일 수 있는 자리는 1, 3, 5, ..., 2c−12c-1번째로 모두 c개다. 가능한 꼭짓점은 모두 입력에 나타난다.

이웃한 두 꼭짓점을 잇는 가로 변은 하이픈 세 개 ---로 그린다. 대각선 변은 빗금 / 하나 또는 역빗금 \ 하나로 그린다. 변을 나타내는 문자는 두 꼭짓점 사이의 정확한 자리에 놓인다. 나머지 자리는 모두 공백이다. 줄 끝의 공백은 생략될 수 있다.

출력

그림에서 변으로 이루어진 삼각형의 개수를 크기에 상관없이 모두 세어 출력한다. 삼각형의 세 변은 모두 그려진 변 위에 놓여야 하고, 한 변은 같은 방향의 변이 연속으로 이어진 구간이다.

예제2

  1. 예제 1

    입력
    3 3
    x---x
     \ /
      x
     / \
    x   x
    
    예상 출력
    1
    
  2. 예제 2

    입력
    4 10
    x   x---x---x   x
         \ /   / \
      x   x---x   x   x
         / \ / \   \
    x   x---x---x---x
       /   / \   \ / \
      x---x---x---x---x
    
    예상 출력
    12