CF1750B.Maximum Substring

传统题 时间 2000 ms 内存 256 MiB 3 尝试 1 已通过 1 标签

Maximum Substring

题目描述

一个二进制字符串是只包含字符 0011 的字符串。给定一个二进制字符串 ss

对于 ss 的某个非空子串 ^\dagger tt,其中包含 xx 个字符 00yy 个字符 11,其代价定义如下:

  • x>0x>0y>0y>0,则代价为 xyx \cdot y
  • x>0x>0y=0y=0,则代价为 x2x^2
  • x=0x=0y>0y>0,则代价为 y2y^2

给定长度为 nn 的二进制字符串 ss,请你求出所有非空子串中的最大代价。

^\dagger 字符串 aa 是字符串 bb 的子串,当且仅当 aa 可以通过删除 bb 最开头和最末尾的若干(可能为 00 或全部)字符得到。

输入格式

输入包含多组测试用例。第一行包含一个整数 tt1t1051 \leq t \leq 10^5),表示测试用例个数。接下来是各个测试用例的描述。

每个测试用例的第一行包含一个整数 nn1n21051 \le n \le 2 \cdot 10^5),表示字符串 ss 的长度。

每个测试用例的第二行包含一个二进制字符串 ss,其长度为 nn

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

输出格式

对于每个测试用例,输出一行一个整数,表示所有子串中的最大代价。

说明/提示

在第一个测试用例中,可以选择子串 111111。它包含 33 个字符 1100 个字符 00,所以 a=3a=3b=0b=0,代价为 32=93^2=9

在第二个测试用例中,可以选择整个字符串。它包含 44 个字符 1133 个字符 00,所以 a=4a=4b=3b=3,代价为 43=124 \cdot 3=12

在第三个测试用例中,可以选择子串 11111111,其代价为 42=164^2=16

在第四个测试用例中,可以选择整个字符串,代价为 43=124 \cdot 3=12

在第五个测试用例中,可以选择子串 000000,其代价为 33=93 \cdot 3=9

在第六个测试用例中,只能选择子串 00,其代价为 11=11 \cdot 1=1

由 ChatGPT 5 翻译

样例

6
5
11100
7
1100110
6
011110
7
1001010
4
1000
1
0
9
12
16
12
9
1

在线编程 IDE

建议全屏模式获得最佳体验