CF2260D Signs of Prefix Sums

题目描述

给定一个整数数组 $a_1, a_2, \dots, a_n$,其中没有元素等于 $0$,定义前缀和数组 $p_1, p_2, \dots, p_n$,其中 $p_i$ 等于数组 $a$ 的前 $i$ 个元素的和。 根据前缀和数组,可以构造一个长度为 $n$ 的字符串 $s$:如果 $p_i > 0$,则 $s$ 的第 $i$ 个字符为 +;如果 $p_i < 0$,则第 $i$ 个字符为 -;如果 $p_i = 0$,则第 $i$ 个字符为 0。 例如,对于数组 $a=[2, -1, -1, -2, 2]$,其前缀和为 $p = [2, 1, 0, -2, 0]$,因此对应的字符串为 ++0-0。 数组 $a$ 的代价定义为 $\max\limits_{1 \le i \le n} |a_i|$。 现在给定一个字符串 $s$,求能够构造出该字符串的整数数组 $a$ 的最小可能代价。数组 $a$ 的所有元素必须非零。如果不存在这样一个数组,输出 $-1$。

输入格式

第一行包含一个整数 $t$($1 \le t \le 10^4$)——表示测试用例数。 每个测试用例包括两行。第一行包含一个整数 $n$($1 \le n \le 3 \cdot 10^5$)——字符串 $s$ 的长度。第二行包含一个由字符 0、+、- 组成的长度为 $n$ 的字符串 $s$。 输入数据还满足所有测试用例中 $n$ 的和不超过 $3 \cdot 10^5$。

输出格式

对于每个测试用例,输出一个整数,表示数组 $a$ 的最小可能代价。如果不存在符合要求的数组,输出 $-1$。

说明/提示

示例中各测试用例的最优数组 $a$: 1. $[1]$; 2. 不存在符合要求的数组; 3. $[2, -1, -1]$; 4. $[1, -3, 1, 2]$; 5. $[1, -2, -1, 1, 2]$; 6. $[2, -2, 2, -1, -2]$。 由 ChatGPT 5 翻译