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

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

Ten

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

요약
양의 정수로 채워진 행렬에서 원소의 합이 정확히 10인 직사각형 부분행렬의 개수를 센다. 행렬 크기는 최대 300 곱하기 300이다.
난이도

보통10점 중 6점

유형
누적 합, 투 포인터, 이분 탐색, 행렬
정답자
아직 제출이 없습니다

문제

부동산 회사 IC가 직사각형 모양의 땅을 관리하고 있다. 이 땅은 m×nm \times n 행렬 모양으로 mnmn개의 구획으로 나뉘어 있으며, 행의 수는 mm, 열의 수는 nn이다. 각 구획은 양의 정수인 가격을 가진다. IC는 땅의 직사각형 일부를 팔려고 하는데, 그 일부의 가격이 10이어야 한다. 어떤 부분의 가격은 그 부분에 속한 구획들의 가격을 모두 더한 값이다. 이런 부분이 여러 개 있을 수 있으므로, IC는 팔 수 있는 후보 부분의 개수를 알고 싶어 한다. IC가 땅에서 후보 부분의 개수를 셀 수 있도록 도와주는 프로그램을 작성하라.

예를 들어, 5×75 \times 7개의 구획을 가진 땅의 구획 가격이 다음과 같이 주어졌다고 하자.

직사각형으로 표시된 팔 수 있는 후보 부분을 네 개 찾을 수 있다. 첫 번째는 첫째 행과 둘째 행에서 둘째 열부터 셋째 열까지 걸친 네 개의 구획으로 이루어지고, 두 번째는 둘째 행과 셋째 행에서 셋째 열부터 다섯째 열까지 걸친 여섯 개의 구획, 세 번째는 첫째 행에서 다섯째 열부터 여섯째 열까지 걸친 두 개의 구획, 네 번째는 일곱째 열에서 셋째 행부터 다섯째 행까지 걸친 세 개의 구획이다. 따라서 위 입력에 대해 프로그램은 4를 출력해야 한다.

입력

입력은 표준 입력에서 읽는다. 입력의 첫 줄에는 땅의 크기를 나타내는 두 양의 정수 mm과 nn이 공백으로 구분되어 주어진다 (1≤m,n≤3001 \le m, n \le 300). 다음 mm개의 줄에는 ii번째 행 구획들의 가격 pijp_{ij}가 각각 nn개씩 공백으로 구분되어 주어진다 (1≤i≤m1 \le i \le m, 1≤j≤n1 \le j \le n, 1≤pij≤101 \le p_{ij} \le 10).

출력

출력은 표준 출력에 쓴다. 가격이 10인 직사각형 부분의 개수를 나타내는 정수를 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    3 5
    3 1 2 1 4
    4 5 2 2 2
    4 7 1 1 2
    
    예상 출력
    2
    
  2. 예제 2

    입력
    4 6
    3 1 2 1 4 6
    4 5 2 2 2 7
    4 7 1 1 1 9
    4 3 3 3 7 2
    
    예상 출력
    8