N개의 정수 수열 A1,A2,…,AN이 주어진다. 수열을 각각이 연속된 네 부분으로 나누려고 한다. 단, 각 부분은 최소 하나의 수를 포함해야 한다. 또, 각 부분의 합은 모두 같아야 한다. 즉, 어떤 i,j,k (1≤i<j<k<N)에 대해서 [A1,…,Ai],[Ai+1,…,Aj],[Aj+1,…,Ak],[Ak+1,…,AN]으로 나눈다.
예를 들어 주어진 수열이 4,−1,2,1,−3,1,2,2,1,3이라고 하자. 이 수열을 아래와 같이 나누면 각 부분의 합이 달라서 허용되는 형태가 아니다.
[4,−1,2],[1,−3,1,2],[2,1],[3]
아래과 같이 나눈 경우 각 부분의 합이 모두 같다.
[4,−1],[2,1],[−3,1,2,2,1],[3]
아래와 같이 나눈 경우들도 각 부분의 합이 모두 같다.
[4,−1],[2,1,−3,1,2],[2,1],[3] 혹은 [4,−1,2,1,−3],[1,2],[2,1],[3]
수열을 입력 받아 위와 같이 나눌 수 있는 가능한 방법의 개수를 계산하는 프로그램을 작성하라.
Limit
- 4≤N≤100 000
- 모든 1≤i≤N에 대해 −1 000≤Ai≤1 000
Subtask
| 번호 | 배점 | 제한 |
|---|
| 1 | 5 | 모든 1≤i≤N에 대해 Ai=0 |
| 2 | 7 | 모든 1≤i≤N에 대해 Ai>0 |
| 3 | 4 | 모든 1≤i≤N에 대해 Ai≥0 |
| 4 | 11 | N≤10 |
| 5 | 19 | N≤500 |
| 6 | 23 | N≤5 000 |
| 7 | 31 | 추가 제약 조건 없음 |
채점 및 기타 정보