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