import
java.util.*;
class
GFG{
static
int
countOfSubStrings(String s)
{
int
n = s.length();
int
x = (
int
)Math.sqrt(n);
Vector<Integer> ones =
new
Vector<Integer>();
for
(
int
i =
0
; i < n; i++)
{
if
(s.charAt(i) ==
'1'
)
ones.add(i);
}
if
(ones.size() ==
0
)
return
0
;
ones.add(n);
int
[]totCount =
new
int
[n * x + n];
int
sum =
0
;
for
(
int
k =
0
; k <= x; k++)
{
int
now =
0
;
totCount[k * n]++;
for
(
int
j =
1
; j <= n; j++)
{
if
(s.charAt(j -
1
) ==
'1'
)
now++;
int
index = j - k * now;
sum += totCount[index + k * n];
totCount[index + k * n]++;
}
now =
0
;
totCount[k * n]--;
for
(
int
j =
1
; j <= n; j++)
{
if
(s.charAt(j -
1
) ==
'1'
)
now++;
int
index = j - k * now;
totCount[index + k * n]--;
}
}
int
[]prefix_sum =
new
int
[n];
Arrays.fill(prefix_sum, -
1
);
int
cnt =
0
;
for
(
int
i =
0
; i < n; i++)
{
prefix_sum[i] = cnt;
if
(s.charAt(i) ==
'1'
)
cnt++;
}
for
(
int
k =
0
; k < n; k++)
{
for
(
int
j =
1
; j <= (n / x) &&
prefix_sum[k] + j <= cnt; j++)
{
int
l = ones.get(prefix_sum[k] + j -
1
)-
k +
1
;
int
r = ones.get(prefix_sum[k] + j) - k;
l = Math.max(l, j * (x +
1
));
if
(l <= r)
{
sum += r / j - (l -
1
) / j;
}
}
}
return
sum;
}
public
static
void
main(String[] args)
{
String S =
"1111100000"
;
System.out.print(countOfSubStrings(S));
}
}