CF1750B.Maximum Substring

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

Maximum Substring

题目描述

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

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

  • 若 x>0x>0 且 y>0y>0,则代价为 x⋅yx \cdot y;
  • 若 x>0x>0 且 y=0y=0,则代价为 x2x^2;
  • 若 x=0x=0 且 y>0y>0,则代价为 y2y^2。

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

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

输入格式

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

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

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

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

输出格式

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

说明/提示

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

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

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

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

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

在第六个测试用例中,只能选择子串 00,其代价为 1⋅1=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

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