CF1750B Maximum Substring
题目描述
一个二进制字符串是只包含字符 $0$ 和 $1$ 的字符串。给定一个二进制字符串 $s$。
对于 $s$ 的某个非空子串 $^\dagger$ $t$,其中包含 $x$ 个字符 $0$ 和 $y$ 个字符 $1$,其代价定义如下:
- 若 $x>0$ 且 $y>0$,则代价为 $x \cdot y$;
- 若 $x>0$ 且 $y=0$,则代价为 $x^2$;
- 若 $x=0$ 且 $y>0$,则代价为 $y^2$。
给定长度为 $n$ 的二进制字符串 $s$,请你求出所有非空子串中的最大代价。
$^\dagger$ 字符串 $a$ 是字符串 $b$ 的子串,当且仅当 $a$ 可以通过删除 $b$ 最开头和最末尾的若干(可能为 $0$ 或全部)字符得到。
输入格式
输入包含多组测试用例。第一行包含一个整数 $t$($1 \leq t \leq 10^5$),表示测试用例个数。接下来是各个测试用例的描述。
每个测试用例的第一行包含一个整数 $n$($1 \le n \le 2 \cdot 10^5$),表示字符串 $s$ 的长度。
每个测试用例的第二行包含一个二进制字符串 $s$,其长度为 $n$。
保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。
输出格式
对于每个测试用例,输出一行一个整数,表示所有子串中的最大代价。
说明/提示
在第一个测试用例中,可以选择子串 $111$。它包含 $3$ 个字符 $1$ 和 $0$ 个字符 $0$,所以 $a=3$,$b=0$,代价为 $3^2=9$。
在第二个测试用例中,可以选择整个字符串。它包含 $4$ 个字符 $1$ 和 $3$ 个字符 $0$,所以 $a=4$,$b=3$,代价为 $4 \cdot 3=12$。
在第三个测试用例中,可以选择子串 $1111$,其代价为 $4^2=16$。
在第四个测试用例中,可以选择整个字符串,代价为 $4 \cdot 3=12$。
在第五个测试用例中,可以选择子串 $000$,其代价为 $3 \cdot 3=9$。
在第六个测试用例中,只能选择子串 $0$,其代价为 $1 \cdot 1=1$。
由 ChatGPT 5 翻译