显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<fstream>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<cmath>
#include<vector>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
const int SIZE=2010;
string Std_in,Std_out,Student_out;
int K;
set<string> choo;
int N,F;
map<string,bool> mates;
char s[SIZE]={0};
int matchbk[SIZE]={0};
void prepare(void){
//string s1="\0";
int tot=0;
int len=strlen(s);
for(int i=0;i<len;i++){
if(s[i]!=' '&&s[i]!='\n'&&s[i]!='\r'){
s[tot++]=s[i];
//s1+=s[i];
}
}
//s=s1;
s[tot]=0;
vector<int> st;
for(int i=0;i<tot;i++){
if(s[i]=='(') st.push_back(i);
if(s[i]==')'){
matchbk[i]=st.back();
st.pop_back();
}
}
}
bool calc(int l,int r){
//for(int i=l;i<=r;i++) cout<<s[i];cout<<endl;
while(s[r]==')'&&matchbk[r]==l) l++,r--;
for(int i=r;i>=l;i--){
if(s[i]==')') i=matchbk[i];
if(s[i]=='&'){
return calc(l,i-1)&&calc(i+1,r);
}
else if(s[i]=='|'){
return calc(l,i-1)||calc(i+1,r);
}
else if(s[i]=='>'){
return !(calc(l,i-2)&&(!calc(i+1,r)));
}
}
string str="\0";
for(int i=l;i<=r;i++){
if(s[i]!='-') str+=s[i];
}
bool ans=mates[str];
if(s[l]=='-') ans^=1;
return ans;
}
void markname(void){
//freopen(Std_in.c_str(),"r",stdin);
cin>>N;
string str;
for(int i=1;i<=N;i++){
cin>>str;
mates[str]=choo.count(str);
}
}
void readans(void){
//freopen(Student_out.c_str(),"r",stdin);
cin>>K;
string str;
for(int i=1;i<=K;i++){
cin>>str;
choo.insert(str);
}
}
void readline(char s[]){
int tot=0;
char ch;
do{
if(scanf("%c",&ch)==EOF) break;
s[tot++]=ch;
}while(ch!='\n'&&ch!='\r');
s[tot]=0;
}
int judge(void){
readans();
markname();
cin>>F;
getchar();
for(int i=1;i<=F;i++){
memset(s,0,sizeof(s));
//cin.getline(s,SIZE-1);
readline(s);
//cout<<strlen(s)<<endl;
prepare();
//getchar();
//getline(cin,s);
//cin>>s;
//cout<<s<<endl;
if(!calc(0,strlen(s)-1)) return 0;
}
return 100;
}
int main(){
freopen("teyf.in","r",stdin);
Std_in="teyf.in";
//Std_out="rng1.ans";
Student_out="teyf.out";
freopen("teyf.out","w",stdout);
cout<<judge()<<endl;
return 0;
//return judge();
}
/*int main(int argc,char* argv[]){
Std_in=string(argv[1]);
Std_out=string(argv[3]);
Student_out=string(argv[2]);
return judge();
}*/