만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

소소고금

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

요약
이진 문자열 S에서 이진수로 읽은 값이 K의 배수인 부분 문자열의 개수를 구합니다. N과 K는 최대 500,000입니다.
난이도

보통10점 중 6점

유형
해시맵, 누적 합, 정수론, 비트 연산
정답자
아직 제출이 없습니다

문제

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

엄밀하게는 1≤l≤r≤N1 \le l \le r \le N인 (l,r)(l, r) 쌍 중 K∣∑i=lrSi2r−iK \mid \sum_{i=l}^{r}S_i2^{r-i}를 만족하는 쌍의 개수를 구하면 된다.

입력

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

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

출력

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

예제1

  1. 예제 1

    입력
    4 6
    1100
    
    예상 출력
    5