ARC110E Shorten ABC
题意 : 给出长为
可执行下列操作任意次(包括零次):
- 选定
使得 ,将 换成和原来的 均不同的字符(这个字符是确定的),并删除 。
求你能获得的不同的
可以发现,最终一定是一段段的字符合并在了一起。
记
但这没有考虑相邻不同的限制。
若区间异或和为
,显然有异常。 若非
,区间清一色是显然无法合成。 否则,必能找到一对能合成的字符,且合成之后仍然满足“区间异或和非0”,“区间并非清一色”,归纳即可。
具体地,随便找一对相邻不等字符
,若合成后区间清一色,说明其余字符都为与 不同的 ,那么可以让 合并(谁不是边界用谁)。
综上,除非区间异或和为
现在就相当于,将
思考如何判定一个
首先
每次选一个最短的可行的段进行转移,到
为了说明正确性,我们需要证明对于任意存在方案的
对于
于是我们只需要计算“靠前”的方案数目。
记
每次向前枚举上一个字符
注意最后一段(必须是异或和为
复杂度