D. 狠狠地对字符串做你想做的事吧!

    Type: Default 1000ms 256MiB

狠狠地对字符串做你想做的事吧!

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

题目描述

对一个字符串 SS ,有以下两种操作:

  • 将子串 0101 替换为 11
  • 将子串 1010 替换为 00

总共 tt 组数据,每组的 SS 都是一个给定长度为 nn0101 串。求 SS 的子串个数,满足经过若干次操作,可将该子串长度变为 11

输入

第一行包含一个整数 tt ( 1t10001 \le t \le 1000 ) 表示测试用例的数量。测试用例说明如下。

每个测试用例的第一行包含一个整数 nn 表示 SS 的长度。

每个测试用例的第二行包含一个由 nn 个字符 S1S2SnS_1S_2 \ldots S_n 组成的二进制字符串 SS 。( 其中Si=0Si=1S_i = 0 或 S_i = 1)

输出

针对每个测试用例,S[lr]S[l \ldots r]SSllrr 的子串)是一个符合要求的字符串,最后输出满足要求的 (l,r)(l, r) 对的数量 (1lrn)(1 \le l \le r \le n)

样例

5
1
1
2
01
3
100
4
1001
5
11111
1
3
4
8
5

样例解释

对于字符串"1001""1001",共有以下8种满足条件的子串

1
0
0
1
10
01
001
1001

数据范围

  • 1t10001 \le t \le 1000
  • 1n2×1051 \le n \le 2\times 10^5
  • n2×105\sum n \le 2\times 10^5

1n21051 \le n \le 2 \cdot 10^5,保证所有测试用例的 nn 总和不超过 21052 \cdot 10^5 。(如果你觉得自己的代码没有问题但是始终出错的时候请在此稍作思索^ ^)