Pagini recente » Cod sursa (job #2686709) | Cod sursa (job #2452900) | Cod sursa (job #1328220) | Cod sursa (job #2640720) | Cod sursa (job #2204065)
#include <bits/stdc++.h>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
const int Nmax = 2048;
int N,p,a[40];
char s[Nmax];
void skip()
{
while (s[p]==' ') ++p;
}
int var();
int eval();
int var()
{
int ret;
if (s[p]=='T' && s[p+1]=='R' && s[p+2]=='U' && s[p+3]=='E')
{
p+=4;
skip();
return 1;
}
if (s[p]=='F' && s[p+1]=='A' && s[p+2]=='L' && s[p+3]=='S' && s[p+4]=='E')
{
p+=5;
skip();
return 0;
}
ret=a[s[p]-'A'];
++p;
return ret;
}
int fact()
{
int neg,ret,val;
skip();
neg=0;
while ( s[p]=='N' && s[p+1]=='O' && s[p+2]=='T')
{
neg^=1;
p+=3;
skip();
}
if (s[p]=='(')
{
++p;
ret=eval();
++p;
skip();
}
else
ret=var();
ret^=neg;
skip();
while (s[p]=='A' && s[p+1]=='N' && s[p+2]=='D')
{
p+=3;
skip();
neg=0;
while (s[p]=='N' && s[p+1]=='O' && s[p+2]=='T')
{
neg^=1;
p+=3;
skip();
}
if (s[p]=='(')
{
++p;
val=eval();
++p;
}
else
val=var();
val=val^neg;
ret=ret&val;
skip();
}
return ret;
}
int eval()
{
int val,ret;
ret=fact();
skip();
while (s[p]=='O' && s[p+1]=='R')
{
p+=2;
skip();
val=fact();
ret=ret|val;
skip();
}
return ret;
}
void readsolve()
{
char i,ch;
in.get(s,Nmax);
in >> N;
for (i=0;i<N;++i)
{
in >> ch;
a[ch-'A']^=1;
p=0;
out << eval();
}
}
int main()
{
readsolve();
return 0;
}