(10) 个 Task,要求构造一种"自动机"识别给定的一类字符串,(Sigma=[33,126]capN)。
Task 1
用节点表示当前最后一个字符。
Task 2
kmp 自动机板子。
Task 3
比较 sb 的部分分,设 (
表示 (1),)
表示 (-1),用节点表示前缀和。
Task 5
用节点表示当前(mod 3) 余数。
Task 6/7
注意到 Fibonacci 串有些好性质:把 (f[i]) 的 ( exttt{ba}) 替换为 ( exttt b),( exttt b) 替换为 ( exttt a) 就得到 (f[i-1])。
这时候就要用到蛐蛐了:匹配到 ( exttt{ba}) 的时候吐一个 ( exttt b),匹配到 ( exttt{bb}) 的时候吐一个 ( exttt a),吃剩个 ( exttt a) 的时候 Accept,吃剩个 ( exttt b) 的时候吐一个 ( exttt a) 然后重新匹配。
要将各个串分开来,所以要搞个分割符,不是 ( exttt{ab}) 就行,不妨设为 (0),在起点放一个吐 (0) 的蛐蛐然后在纸上画画即可。
Task 10
看上去很吓人,但这东西实际上仍然是一个括号匹配。
建 (2 imes 101) 个点,(xpod{xin[1,101]}) 表示 ( exttt i) 比 ( exttt e) 多 (x-1) 个,(x+101) 表示 ( exttt i) 比 ( exttt e) 多 (x-1) 个,且后面多了个 ( exttt a)。