#P16474. [SPOJ 4069]Morphing is Fun
[SPOJ 4069]Morphing is Fun
题目背景
花匠培育出了一种生长速度惊人的“变形树”。它只有一根竖直的树干,树干由许多大小相同的细胞自下而上堆叠而成。每个细胞都有一种颜色,而颜色决定了它在夜间会变成怎样的一段新细胞。
花匠想建一座固定高度的观测塔,通过观察树干底部的一段来判断树是否仍在继续发生变化。不过,有些变形规则会让树干不断生长,任意一个固定位置的颜色却最终不再改变。在这种情况下,无论塔建得多高,都无法可靠地判断树是否仍“活着”。
题目描述
共有 种颜色,依次用小写字母 a 到第 个小写字母表示。
对于每一种颜色,都给定一个非空字符串作为它的变形规则。字符串中的字符按从树干底部到顶部的顺序排列。
最初,树干只有一个颜色为 a 的细胞。每个夜晚,当前树干中的所有细胞会同时按照各自颜色的规则,被替换成对应的一段新细胞。
例如,若规则为:
a -> abb -> ca
则初始树干为 a,经过两个夜晚后依次变为:
a
ab
abca
为了描述高于树顶、尚不存在的位置,可以认为这些位置的状态是一个特殊的空白符。对于任意固定位置 ,若从某一天开始,该位置的状态(某种颜色或空白)永远不再改变,则称第 个位置最终稳定。
你需要判断:是否每一个固定位置都会最终稳定。
- 若是,则建造任何固定高度的观测塔都没有意义,输出
YES; - 否则,存在某个固定位置会无限次改变颜色,输出
NO。
输入格式
第一行包含一个整数 ,表示测试用例数量。
对于每个测试用例:
- 第一行包含一个整数 ,表示颜色数量;
- 接下来 行,第 行是第 种颜色的变形规则。第 种颜色为
a,第 种颜色为b,依此类推。
每条规则均为非空字符串,且只包含前 个小写英文字母。
输出格式
对于每个测试用例输出一行:
- 若每一个固定位置最终都会稳定,输出
YES; - 否则输出
NO。
样例输入
4
2
ab
a
3
ba
c
c
3
ba
c
b
3
bbbbbbbbbbbbbbb
ccccccccccccccc
c
样例输出
YES
YES
NO
YES
样例解释
对于第二组数据:
a -> ba
b -> c
c -> c
树干依次为:
a
ba
cba
ccba
cccba
...
对于任意固定位置,它最终都会变成 c,所以输出 YES。
对于第三组数据,颜色 b 和 c 会在树干底部不断交替,因此第一个位置永远不会稳定,输出 NO。
数据范围
- ;
- ;
- 每条变形规则的长度为 到 ;
- 每条规则只包含
a到第 个小写字母。