#G. 重数种类之和

    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.

题面背景

我们规定, 在一个序列中出现次数最多的那个数字就是重数, 如果有多个数字出现次数最多且相同, 则这些数字都是重数.

题目描述

给你一个 01 字符串, 只由数字 01 构成, 我们想知道, 在所有的 [l,r][l, r] 串中, 重数种类之和是多少?

例如:

10 的重数种类之和是 44

长度为 11 的子串 1 的重数种类只有 11 个, 子串 0 的重数种类只有 11

长度为 22 的子串 10 的重数种类有 10 两个

例如:

1100 的重数种类之和是 1212

长度为 11 的子串 1, 1, 0, 0 的重数种类之和为 44

长度为 22 的子串 11, 10, 00 的重数种类为 1,2,11, 2, 1 个, 总数量也是 44

长度为 33 的子串 110, 100 的重数种类为 1,11, 1个, 总数量是 22

长度为 44的子串 1100 的重数种类为 22

一共是 1212

输入格式

第一行一个整数 tt 表示有 tt 组数据

接下来 tt 组数据, 每组数据的第一行是一个整数 nn 表示 01 串的长度

第二行为一个长度为 nn01

输出格式

输出 tt 行, 每行一个整数表示每个样例的重数种类之和.

样例 #1

样例输入 #1

3
2
10
4
1100
5
10101

样例输出 #1

4
12
21

提示

  • 2t10 2 \le t \le 10
  • 对于 40%40\% 的数据 1n103 1 \le n \le 10^3
  • 对于 100%100\% 的数据 1n105 1 \le n \le 10^5