소소고금

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

요약
이진 문자열의 부분 문자열 가운데 이진수로 읽었을 때 K의 배수가 되는 것의 개수를 센다.
난이도

어려움10점 중 8점

유형
해시맵, 누적 합, 수학
정답자
아직 제출이 없습니다

문제

00과 11로만 이루어진 길이 NN의 이진 문자열 SS가 주어진다. SS의 부분 문자열 중 이를 이진법 표기로 생각했을 때의 값이 KK의 배수인 것의 수를 구하여라. 단, 부분 문자열의 첫 원소가 00이어도 된다.

엄밀하게는 S_1S_2⋯S_NS\_1S\_2 \cdots S\_N에서 K∣∑_i=lrS_i2r−iK \mid \sum\_{i=l}^{r}S\_i2^{r-i} (1≤l≤r≤N)(1 \le l \le r \le N)인 (l,r)(l, r) 쌍의 수를 구하면 된다.

입력

첫째 줄에 문자열의 길이 NN과 양의 정수 KK가 공백으로 구분되어 주어진다. (1≤N,K≤500,000)(1 \leq N, K \leq 500\\,000)

둘째 줄에 문자열 SS가 주어진다. SS는 00과 11로만 구성되어 있다.

출력

이진법 표기로 생각했을 때의 값이 KK의 배수인 부분 문자열의 수를 출력한다.

예제1

  1. 예제 1

    입력
    4 6
    1100
    
    예상 출력
    5