Promising String
题意
给出一个仅仅包含'+' '-'的字符串,我们可以将两个连续的'-',合并为'+'。
求其所有子串经历变换后 '+' 的数量等于 '-' 的数量的个数。
思路
假若,我们有一段连续的序列了,其中有 x 个 '+' , y 个 '-'。
那么我们如果想要成立的话,那么我们需要以下几个条件成立。
y >= xx + k = y - k * 2即y - x = 3 * k
也就是说,我们只需要 (y - x) % 3 = 0 情况下的答案。
首先,如果,我们用 -+ 把所有的 + 排完。那么我们就得到 k >= (y - x) / 2。而我们需要的数量为 (y - x) / 3 < (y - x) / 2 。因此,我们的 k 约束百分之百成立。
那么最后,我们记录前缀和,我们只考虑 (m[R] - m[L]) - (p[R] - p[L]) 模三得 0 的个数。
那么我们开三个树状数组完成统计即可。

京公网安备 11010502036488号