Description
Data Constraint
Solution
可以看出来,只要一段中1的个数和0的个数相同就可以满足了,前缀和能够比较好地判断是否合法。观察数据可以发现,询问的长度总和不会超过 2∗105 ,那么长度小于等于300的可以直接预处理出来,剩下的直接暴力,均摊的时间不会很多。
Code
const mx=350;
var
t:array[0..200000] of longint;
f:array[0..mx,0..mx] of longint;
s:ansistring;
n,i,j,l,ans,len,sum:longint;
begin
readln(s);
len:=length(s);
for i:=1 to len do
begin
t[i]:=t[i-1];
if s[i]='0' then inc(t[i]);
end;
for i:=1 to mx do
for j:=0 to len-i do inc(f[i,t[j+i]-t[j]]);
readln(n);
for i:=1 to n do
begin
readln(s);
ans:=0; l:=length(s);
sum:=0;
for j:=1 to l do
if s[j]='0' then inc(sum);
if l<=mx then writeln(f[l,sum])
else
begin
for j:=0 to len-l do
if t[j+l]-t[j]=sum then inc(ans);
writeln(ans);
end;
end;
end.