|
第四题
自动计算机器(NTA)
提交文件名:nta.exe
问题描述:
一个自动计算机器(NTA)是由一些平行的处理器组成。处理器拥有有限种状态,被放在一个无限的三角形格架上。在三角形格架的顶端,只有一个处理器。下一行有两个,以后每一行都比上一行多一个。每一个处理器都于下一行的两个子处理器建立着联系。NTA的计算工作是自下而上的。每一个处理器的状态是由他下一行的两个子处理器的状态和一个状态转换表所决定。输入给NTA的一行处理器的状态。由
n 个字母表示位于同一行的 n
个处理器的最初状态。由每两个子处理器的状态和状态转换表来计算上一行每个处理器的状态。直到求出位于顶端的那个处理器的状态为止。但,在计算过程中,状态可能不是唯一确定的。
一些状态被认为是合法的。经过计算,顶端的处理器的状态可以为合法状态的输入为合法输入。如果顶端处理器的状态不可能为合法状态,那么,输入被认为非法的。下边是一个拥有三个状态NTA的例子,用“a”、“b”、“c”来代表三个状态,“c”被认为是唯一合法的状态。
下边的表格是由“bba”的两个计算过程。左边的得到了非法状态“a”;但是,右边的得到了合法的状态“c”。一个输入,经过计算只要能得到合法的状态,就认为是合法的输入。但是“bbb”被认为是非法输入。因为,它唯一的计算结果“a”为非法的。
输入格式:
数据存放在当前目录下的文本文件“nta.dat
”中;文件中包含 t 组数据。
要求用小写字母代表处理器的状态。因此,如果NTA有五个状态的话,表示成“a”、“b”、“c”、“d”和“e”。合法的状态位于后面,所以如果要两个合法状态的话,应是“d”和“e”。
文件的第一行为一整数 t ,随后跟着 t 组数据。
每一组数据的第一行为两个整数 n 和 m ,表示NTA的状态的个数和合法状态个数。以下n×n行为NTA的状态转换表。第(i-1)×n+j=1行表示左子处理器为第
i 个状态,右子处理器为第 j
个状态时所能确定的状态。如果有多个状态,则挨着给出。第n1×n1+2行为所输入的状态。行结束为一个“#”。
NTA最多有15个状态,输入的最初状态最多为15个字母。
输出格式:
答案输出到当前目录中的文本文件“nta.out”中。共有
t 行,第 i 行为第 i 个数据的输出结果。
如果为合法输入,则输出“accept”,否则输出“reject”。
输入输出样例:
|
输入样例 |
输出样例 |
|
nta.dat |
nta.out |
|
2
3
1
a
a
c
ca
a
b
c
b
a
bba# |
accept |
|
3
1
a
a
c
ca
a
b
c
b
a
bbb# |
reject |
|