決定論的なスタックオートマトンをシミュレートする必要があるUVAの演習を読んで、特定の文字列が次の形式の特定のエントリでDSAによって受け入れられるかどうかを確認しました。
入力の最初の行は、テストケースの数を示す整数Cになります。各テストケースの最初の行には、5つの整数E、T、F、S、およびCが含まれています。ここで、Eはオートマトンの状態の数、Tは遷移の数、Fは最終状態の数、Sは初期状態、 Cそれぞれテスト文字列の数。次の行には、オートマトンの最終状態を表すF個の整数が含まれます。次に、それぞれ2つの整数IとJ、および3つの文字列L、T、Aを持つT行が表示されます。ここで、IとJ(0≤I、J <E)は、それぞれ遷移状態の起点と終点を表します。Lは、テープからトランジションに読み取られた文字を表します。Tはスタックの一番上にあるシンボルを表し、Aはこの遷移の終わりにスタックの一番上で実行するアクションを表します(パイルの一番下を表すために使用される文字は常にZです。文字列、または遷移文字のスタックの最上位を考慮しないアクションをアンスタックします£)。スタックのアルファベットは大文字になります。チェーンAの場合、シンボルは右から左にスタックされます(プログラムJFlapと同じ方法で、つまり、スタックの新しい一番上が左側の文字になります)。次に、それぞれに入力文字列が含まれるC行が表示されます。入力文字列には小文字と数字を含めることができます(必ずしもトランジションに存在する必要はありません)。または、遷移文字のスタックの最上位を考慮しないアクションをアンスタックします£)。スタックのアルファベットは大文字になります。チェーンAの場合、シンボルは右から左にスタックされます(プログラムJFlapと同じ方法で、つまり、スタックの新しい一番上が左側の文字になります)。次に、それぞれに入力文字列が含まれるC行が表示されます。入力文字列には小文字と数字を含めることができます(必ずしもトランジションに存在する必要はありません)。または、遷移文字のスタックの最上位を考慮しないアクションをアンスタックします£)。スタックのアルファベットは大文字になります。チェーンAの場合、シンボルは右から左にスタックされます(プログラムJFlapと同じ方法で、つまり、スタックの新しい一番上が左側の文字になります)。次に、それぞれに入力文字列が含まれるC行が表示されます。入力文字列には小文字と数字を含めることができます(必ずしもトランジションに存在する必要はありません)。
各テストケースの最初の行の出力には、次の文字列「Case G:」が表示されている必要があります。ここで、Gはテストケースの数(1から始まります)を表します。次に、オートマトンが文字列を受け入れる場合は「OK」、それ以外の場合は「拒否」という単語を印刷するC行。
例えば:
Input:
2
3 5 1 0 5
2
0 0 1 Z XZ
0 0 1 X XX
0 1 0 X X
1 1 1 X £
1 2 £ Z Z
111101111
110111
011111
1010101
11011
4 6 1 0 5
3
1 2 b A £
0 0 a Z AZ
0 1 a A AAA
1 0 a A AA
2 3 £ Z Z
2 2 b A £
aabbb
aaaabbbbbb
c1bbb
abbb
aaaaaabbbbbbbbb
これは出力です:
Output:
Case 1:
Accepted
Rejected
Rejected
Rejected
Accepted
Case 2:
Accepted
Accepted
Rejected
Rejected
Accepted
助けが必要です。または、このDSAをシミュレートする方法についてのアイデアが必要です。自分でコードを作成したいので、問題を解決するコードを求めていません(アイデアは正しく学習することですか??)が、助けが必要です。 (いくつかのアイデアまたは擬似コード)実装を開始します。