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

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

Unifying Values

면접 대비

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

요약
수열을 둘 이상의 연속한 부분으로 나눌 때 모든 부분의 합이 같아지는 분할의 개수를 1,000,000,007로 나눈 나머지로 구합니다.
난이도

보통10점 중 6점

유형
누적 합, 동적 계획법, 해시맵
정답자
아직 제출이 없습니다

문제

NN개의 수로 이루어진 수열이 주어진다. 우리는 이 수열을 둘 이상의 연속한 부분으로 나눈 다음 각 부분에 속하는 수들의 합을 구할 수 있다. 이 때, 합을 구한 모든 수가 같아지도록 수열을 나누는 방법의 개수를 구하는 프로그램을 작성하라.

예를 들어 수열이 \[4,−3,1,0,1]\[4, -3, 1, 0, 1]이라고 하자. \[4,−3]\[4, -3], \[1]\[1], \[0,1]\[0, 1]의 세 부분으로 나누거나, \[4,−3]\[4, -3], \[1,0]\[1, 0], \[1]\[1]의 세 부분으로 나누면 모든 부분의 합이 11이 된다. 이외의 방법은 없으므로, 이 입력에 대한 답은 22가 된다.

입력

첫 번째 줄에 하나의 정수 NN(1≤N≤1041 ≤ N ≤ 10^4)이 주어진다.

두 번째 줄에는 수열에 포함된 NN개의 정수가 공백 하나로 구분되어 순서대로 주어진다. 각 정수는 −1014-10^{14}이상 101410^{14}이하의 정수다.

출력

수열을 나누는 방법의 개수를 출력한다. 이 수가 매우 클 수 있으므로, 1,000,000,0071\\,000\\,000\\,007로 나눈 나머지를 출력하도록 한다.

예제3

  1. 예제 1

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

    입력
    6
    1 1 1 1 1 1
    
    예상 출력
    3
    
  3. 예제 3

    입력
    4
    100 200 300 400
    
    예상 출력
    0