// C++Exercise.cpp : 定义控制台应用程序的入口点。
//
#include<iostream>
#include<string>
#include<stack>
#include<map>
#include<vector>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstdio>
using namespace std;
int n, m, k, L;
int index;
typedef struct{
int lsig;
int rsig;
}signal;
vector<signal> table[20][20];
char data[12345];
bool dfs(int sig,int cur){
if (cur >= index || data[cur] == '*'){
if (sig < n - m) return false;
return true;
}
int left = 2 * cur + 1;
int right = left + 1;
int sig1, sig2;
int j = data[cur] - 'a';
for (int i = 0; i < table[sig][j].size(); i++){
sig1 = table[sig][j][i].lsig;
sig2 = table[sig][j][i].rsig;
if (dfs(sig1,left) && dfs(sig2,right)) return true;
}
return false;
}
int main(){
int NTA = 0;
while (cin >> n >> m >> k){
NTA++;
if (n == 0 && m == 0 && k == 0) break;
for (int i = 0; i < n; i++){
for (int j = 0; j < k; j++){
table[i][j].clear();
while (1){
signal temp;
cin >> temp.lsig >> temp.rsig;
table[i][j].push_back(temp);
char ch = cin.get();
if (ch == '\n') break;
}
}
}
if (NTA > 1) cout << endl;
cout << "NTA" << NTA << ":" << endl;
while (cin >> L){
if (L == -1) break;
index = 0;
for (int i = 0; i <= L; i++){
for (int j = 0; j < (1 << i); j++){
cin >> data[index];
index++;
}
}
if (dfs(0, 0)) cout << "Valid" << endl;
else cout << "Invalid" << endl;
}
}
return 0;
}
zoj 1011
最新推荐文章于 2019-10-28 16:39:10 发布