编程题
### 问题描述 一天,勇敢的小然在一次冒险中找到了一个神秘的宝箱。宝箱上有一串由 0 和 1 构成的神秘密码,只有解开这个密码,宝箱才会打开。密码的解开方法是:找出密码中的一个子串,将其中的所有数字翻转(即 0 变为 1,1 变为 0)。这个操作只能进行一次。 小然发现,密码锁的机关在于密码中的 1 的数量。他需要计算出每个可能的子串中 1 的数量,然后将这些数量相加,从而启动机关。设 $f(L,R)$ 表示从位置 $L$ 到 $R$(包括两端)的子串中 1 的个数。小然需要计算的就是所有可能 $L$ 和 $R$ 的 $f(L,R)$ 的和,即: $$ \sum_{L=1}^{N} \sum_{R=L}^{N} f(L,R) $$ 请帮助小然计算出,通过一次合适的翻转操作,能得到的 $1$ 的数量的最大总和是多少。 ### 输入格式 第一行为一个整数 $T$,表示小然需要解开的密码数量。 接下来 $T$ 行,每行一个字符串 $S$,表示一个密码,字符串由 $0$ 和 $1$ 组成。 ### 输出格式 输出 $T$ 行,每行一个整数,表示通过一次合适的翻转操作,对应密码能得到的 1 的数量的最大总和。 ### 样例输入 ```text 3 111 000 00100 ``` ### 样例输出 ```text 10 10 26 ``` ### 说明 在第一个样例中,密码已经全部为 $1$,所以无需翻转,$1$ 的数量的总和为 $10$。 在第二个样例中,翻转整个密码,使其全部变为 $1$,此时 $1$ 的数量的总和也为 $10$。 在第三个样例中,翻转整个密码,使其变为 $11011$,此时 $1$ 的数量的总和为 $26$,这是所有可能情况中的最大值。 ### 评测数据范围 $1 \leq T \leq 10^3$,$1 \leq |S| \leq 3 \times 10^5$。 所有测试用例的 $|S|$ 之和不超过 $3 \times 10^5$。
查看答案
赣ICP备20007335号-2