#3088. C-是不是好子串

C-是不是好子串

C-是不是好子串

题目描述

给定一个二进制字符串 ss(即字符串中的每个字符都是 00 或 11)。

定义 f(t)f(t) 为将二进制字符串 tt 转换为对应的十进制整数。例如,f(011)=3f(011) = 3,f(00101)=5f(00101) = 5,f(00001)=1f(00001) = 1,f(10)=2f(10) = 2,f(000)=0f(000) = 0,f(000100)=4f(000100) = 4。

如果子串 sl,sl+1,…,srs_l, s_{l+1}, \dots, s_r 满足 r−l+1=f(sl…sr)r - l + 1 = f(s_l \dots s_r),则称该子串为“好子串”。

例如,字符串 s=1011s = 1011 有 55 个好子串:s1…s1=1s_1 \dots s_1 = 1,s3…s3=1s_3 \dots s_3 = 1,s4…s4=1s_4 \dots s_4 = 1,s1…s2=10s_1 \dots s_2 = 10,以及 s2…s4=011s_2 \dots s_4 = 011。

你的任务是计算字符串 ss 的好子串的数量。

你需要回答 tt 个独立的询问。

输入格式

第一行包含一个整数 tt(1≤t≤10001 \le t \le 1000),表示询问的数量。

每个询问占一行,包含一个仅由数字 00 和 11 组成的字符串 ss(1≤∣s∣≤2×1051 \le |s| \le 2 \times 10^5)。

保证所有字符串长度之和 ∑i=1t∣si∣≤2×105\sum\limits_{i=1}^{t} |s_i| \le 2 \times 10^5。

输出格式

对于每个询问,输出一个整数,表示字符串 ss 的好子串数量。

输入输出样例 #1

输入 #1

4
0110
0101
00001000
0001000

输出 #1

4
3
4
3