Pagini recente » Cod sursa (job #2170938) | Cod sursa (job #235287) | Cod sursa (job #298171) | Cod sursa (job #699703) | Cod sursa (job #1233190)
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
int n, i, m, q;
bool bl, v[105];
char ch, s[1005], e[1005];
bool cond(int x)
{
if(s[x]=='('||s[x]==')') return 1;
if(s[x]==' ') return 1;
if(s[x]>='A'&&s[x]<='Z') return 1;
return 0;
}
bool eval();
bool evalAND(bool x);
bool evalNOT(int x);
int main()
{
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
gets(s+1);
m=1;
while(cond(m)) m++;
q=0;
for(i=1;i<=m;i++)
{
if(s[i]=='A'&&s[i+1]=='N'&&s[i+2]=='D')
{
e[++q]='&';
i+=2;
}
else if(s[i]=='O'&&s[i+1]=='R')
{
e[++q]='|';
i++;
}
else if(s[i]=='N'&&s[i+1]=='O'&&s[i+2]=='T')
{
e[++q]='!';
i+=2;
}
else if(s[i]=='F'&&s[i+1]=='A')
{
e[++q]='0';
i+=4;
}
else if(s[i]=='T'&&s[i+1]=='R')
{
e[++q]='1';
i+=3;
}
else if(s[i]==' ') continue;
else e[++q]=s[i];
}
scanf("%d\n", &n);
while(n--)
{
scanf("%c", &ch);
v[ch-'A']^=1;
i=0;
printf("%d", eval());
}
return 0;
}
bool eval()
{
int total=-1;
int x=0;
//int i=1;
bool bulaneala=false;
while(i<=q)
{
i++;
if(x==0) bulaneala=false;
else bulaneala=true;
if(e[i]>='A'&&e[i]<='Z')
{
if(v[e[i]-'A']==1) x=1;
else x=0;
continue;
}
if(e[i]=='(')
{
x=eval();
continue;
}
if(e[i]==')')
{
break;
}
if(e[i]=='|')
{
if(total==-1) total=x;
else total|=x;
continue;
}
if(e[i]=='&')
{
x=evalAND(bulaneala);
continue;
}
if(e[i]=='!')
{
i++;
x=evalNOT(i);
continue;
}
if(e[i]=='1')
{
x=1;
continue;
}
if(e[i]=='0')
{
x=0;
continue;
}
}
if(total==-1) total=x;
else total|=x;
if(total==1) return true;
return false;
}
bool evalAND(bool x)
{
bool total=x;
bool y=false;
while(i<=q)
{
i++;
if(e[i]==')')
{
i--;
break;
}
if(e[i]=='(')
{
y=eval();
continue;
}
if(e[i]=='&')
{
total&=y;
continue;
}
if(e[i]>='A'&&e[i]<='Z')
{
y=v[e[i]-'A'];
continue;
}
if(e[i]=='|')
{
i--;
break;
}
if(e[i]=='!')
{
i++;
y=evalNOT(i);
continue;
}
if(e[i]=='1')
{
y=true;
continue;
}
if(e[i]=='0')
{
y=false;
continue;
}
}
total&=y;
return total;
}
bool evalNOT(int x)
{
bool boolaneala=false;
if(e[x]=='1') boolaneala=false;
else if(e[x]=='0') boolaneala=true;
else if(e[x]=='(') boolaneala=eval();
else boolaneala=v[e[x]-'A'];
return boolaneala^1;
}