ARC099D Eating Symbols Hard
题意 : 你有一个初始为
给出一个长度为 <,>,+,-
组成,其中每个字符意义如下。
<将指针左移一位。>将指针右移一位。+将指针对应位置。 -将指针对应位置。
求有多少个子串,使得执行完子串的操作后,数组和执行完整个串是一样的。(不要求指针位置相同)
Hash 题。
考虑使用经典的字符串 Hash 描述该数组。
对于数组
记指针位置为
考察各个操作对 Hash 值的影响。
- 在串后添加一个
<: - 在串后添加一个
>: - 在串后添加一个
+: - 在串后添加一个
-:
于是,容易求出每个前缀的 Hash 值。记执行
记执行
考虑如何求出某个区间
枚举左端点,使用 std::map
统计符合要求的右端点个数即可。
复杂度