这题挺难的,绿或者蓝吧,橙是不应该的。
首先看到本题,我们可以想到那种常见的前缀和处理,就是根据前缀和的可差分性进行处理,但是这里数据范围太大了,加上有三种字符,挺难处理的,做应该是可以做,但我不推荐。
这里我采用的是随机化的算法,目前的最优解,其实根据题目描述我们也能想到另一个对于前缀和的处理,就是将一类物品设为正值,另一类为负值(绝对值相同),那么区间和为
0
0 就意味着这个区间内两类数字出现次数相同。
可是同样的问题来了,这里有三种字母,三个量如何处理呢?这里我就采用了随机化的算法,给前两个字母分别赋一个值,将剩下的那个字母权值设为前两个字母和的相反数。
这里细节挺多的,下面讲一些。
要注意一个区间中可能只有两种甚至是一种字符,所以对每种情况需分类讨论。
由于随机化的处理难免会有一些问题,所以我用了无符号整数加上 hash 的处理,用 map 也能过
�
�
�
ans 记得开 long long。