코코의 노래

시간 제한10초메모리 제한1536 MB

요약
앵무새의 흉내 패턴과 일치하는 부분 수열의 개수를 센다. 첫 값 k가 블록 수와 같고, k개 블록의 앞쪽 절반이 모두 같아야 한다.
난이도

어려움10점 중 9점

유형
문자열 매칭, 수학, 구현, 해시맵
정답자
아직 제출이 없습니다

문제

서울대학교에는 '코코'라는 특별한 앵무새가 살고 있다. 코코는 들려오는 소리의 수열을 듣고 그 중 일부를 독특한 방식으로 흉내내곤 한다.

코코는 다음과 같은 형태의 소리 수열을 흉내낼 수 있다.

  • 코코의 흉내내기는 어떤 양의 정수 kk를 먼저 외치는 것으로 시작한다. 즉 소리 수열의 첫 번째 원소는 kk이다.
  • 이어서, 길이가 짝수 MM인 kk개의 소리 수열 S_1,S_2,⋯ ,S_kS\_1, S\_2,\cdots,S\_k를 연속하여 외친다.
  • 소리 수열 S_iS\_i의 앞쪽 절반의 수 M2\frac{M}{2}개를 떼어 만든 수열은 S_1,S_2,⋯ ,S_kS\_1, S\_2,\cdots, S\_k에서 모두 동일해야 한다. (1≤i≤k1\le i\le k)
  • 소리 수열 S_iS\_i의 뒤쪽 절반의 수 M2\frac{M}{2}개는 제멋대로 소리를 내서, 서로 달라도 상관이 없다.

서울대학교 관악캠퍼스 전체에 울려 퍼진 길이 NN의 소리 수열 AA가 주어졌을 때, 1≤l<r≤N1 \le l < r \le N을 만족하는 모든 연속 부분 수열 \[A_l,A_l+1,⋯ ,A_r]\[A\_l,A\_{l+1},\cdots, A\_r] 중 코코가 흉내낼 수 있는 것의 개수를 구하자.

더 엄밀하게는, 어떤 양의 정수 pp에 대해 연속 부분 수열의 길이가 1+2A_sp1+2A\_s p이며, 모든 1≤j<A_s1 \le j < A\_s와 1≤l≤p1 \le l \le p에 대해 A_s+l=A_s+l+j⋅2pA\_{s+l} = A\_{s+l+j \cdot 2p}를 만족하는 경우에만 코코가 시작 인덱스가 ss인 연속 부분 수열을 흉내낼 수 있다.

입력

첫 번째 줄에 테스트 케이스의 개수 T(1≤T≤300,000)T(1 \le T \le 300\\,000)가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 소리 수열의 길이 N(1≤N≤300,000)N(1 \le N\le 300\\,000)이 주어진다.

각 테스트 케이스의 두 번째 줄에는 NN개의 정수로 이루어진 소리 수열 A_1,A_2,⋯ ,A_N(1≤A_i≤109)A\_1, A\_2, \cdots, A\_N(1 \le A\_i \le 10^9)이 공백으로 구분되어 주어진다.

모든 테스트 케이스에 대한 NN의 총합은 300,000300\\,000을 넘지 않는다.

입력으로 주어지는 모든 수는 정수이다.

출력

각 테스트 케이스마다, 코코가 흉내낼 수 있는 연속 부분 수열의 총 개수를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    3
    6
    2 1 2 1 3 1
    11
    2 2 2 2 2 2 2 2 2 2 2
    15
    2 3 1 3 1 3 1 3 3 1 3 1 3 1 3
    
    예상 출력
    4
    10
    23