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