AT_ttpc2015_p Dancing stars on regular expression!
题目描述
在这里,我们称以下结构的字符串为“正则表达式”:
> $ e $ ::= $ a...a $ | ($ e_1 $+$ e_2 $) | ($ e_1 $;$ e_2 $) | \*($ e_1 $) | !($ e_1 $)
其中,$ a...a $ 表示由字符 $ a $ 连续重复一次或多次构成的字符串。
正则表达式 $ e $ 所代表的字符串集合 $ L(e) $ 可以通过下面的规则递归定义:
1. $ L(a...a)\ =\ \{a...a\} $,如 $ L(aa)\ =\ \{aa\} $, $ L(aaa)\ =\ \{aaa\} $。
2. $ L((e_1+e_2))\ =\ L(e_1)\ ∪\ L(e_2) $ 是 $ L(e_1) $ 和 $ L(e_2) $ 中任一集合中元素的合集。
3. $ L((e_1;e_2))\ =\ L(e_1)L(e_2) $,即 $ L(e_1) $ 中的字符串与 $ L(e_2) $ 中的字符串组合而成的所有字符串形成的集合。
4. $ L(*(e_1)) $ 表示 $ L(e_1) $ 中字符串的任意次数(包括零次)连接。
5. $ L(!(e_1))\ =\ Σ^*\ -\ L(e_1) $,即从所有可能字符串中除去 $ L(e_1) $ 的集合。
这里,$ Σ^* $ 是所有可能字符串的集合,形如 $ \{ε,a,aa,aaa,\ldots\} $,由 $ a $ 字符有限次重复组成。
另外,无 `!` 正则表达式表示不包含 `!` 操作符的表达式,而无 `*` 正则表达式表示不包含 `*` 操作符的表达式。
现在给你一个无 `!` 的正则表达式 $ S $,请判断是否存在一个无 `*` 的正则表达式 $ T $,使得 $ L(S) = L(T) $。
输入格式
输入为以下格式:
- 第一行是一个整数 $ N $ ($ 1 \leq N \leq 4000 $),表示第二行输入的字符串 $ S $ 的长度。
- 第二行是一个无 `!` 正则表达式的字符串 $ S $。
输出格式
如果存在一个无 `*` 的正则表达式 $ T $ 满足 $ L(S) = L(T) $,输出 `YES`;否则,输出 `NO`。
### 数据范围与提示
- 示例 1:可以选择 $ T = (a+aa) $ 作为答案。
- 示例 2:可以选择 $ T = (!(a)+a) $ 作为答案。
- 示例 3:不存在符合 $ L(S) = L(T) $ 的无 `*` 正则表达式 $ T $。
**本翻译由 AI 自动生成**
说明/提示
### Sample Explanation 1
$ T\ =\ (a+aa) $ とすればよい。
### Sample Explanation 2
$ T\ =\ (!(a)+a) $ とすればよい。
### Sample Explanation 3
$ L(S)\ =\ L(T) $ を満たす \\\*なし正規表現 $ T $ は存在しません。