CF2121G.Gangsta

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给定一个长度为 nn 的二进制字符串 s1s2…sns_1s_2\ldots s_n。一个字符串被称为二进制字符串当且仅当它只包含 00 和 11。

对于一个字符串 pp,我们定义函数 f(p)f(p) 为字符串 pp 中某个字符出现次数的最大值。例如,f(00110)=3f(00110) = 3,f(01)=1f(01) = 1。

你需要计算所有满足 1≤l≤r≤n1 \leq l \leq r \leq n 的区间 [l,r][l, r],即所有子串 slsl+1…srs_ls_{l+1}\ldots s_r 的 f(slsl+1…sr)f(s_ls_{l+1}\ldots s_r) 之和。

输入格式

每个测试点包含多组测试数据。第一行包含一个整数 tt(1≤t≤1041 \leq t \leq 10^4),表示测试用例的数量。接下来是每个测试用例的描述。

每个测试用例的第一行包含一个整数 nn(1≤n≤2⋅1051 \leq n \leq 2 \cdot 10^5),表示二进制字符串的长度。

每个测试用例的第二行包含一个长度为 nn 的字符串 ss,仅由 00 和 11 组成,即二进制字符串 ss。

保证所有测试用例中 nn 的总和不超过 2⋅1052 \cdot 10^5。

输出格式

对于每个测试用例,输出所有区间 [l,r][l, r] 的 f(slsl+1…sr)f(s_ls_{l+1}\ldots s_r) 之和。

输入输出样例

  • 输入#1

    6
    1
    0
    2
    01
    4
    0110
    6
    110001
    8
    10011100
    11
    01011011100

    输出#1

    1
    3
    14
    40
    78
    190

说明/提示

在第一个测试用例中,字符串 ss 只有一个子串,f(0)=1f(0) = 1。

在第二个测试用例中,字符串 ss 的所有子串为 00、0101、11,答案分别为 1+1+1=31 + 1 + 1 = 3。

在第三个测试用例中,字符串 ss 的所有子串为 00、0101、011011、01100110、11、1111、110110、11、1010、00,答案分别为 1+1+2+2+1+2+2+1+1+1=141 + 1 + 2 + 2 + 1 + 2 + 2 + 1 + 1 + 1 = 14。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页