Pagini recente » Cod sursa (job #3260032) | Cod sursa (job #2801955) | Cod sursa (job #457181) | Cod sursa (job #1081663) | Cod sursa (job #94588)
Cod sursa(job #94588)
#include <cstdio>
#define fin "bool.in"
#define fout "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(); //sar spatii
val=fact();
ret=ret|val;
skip();
}
return ret;
}
void readsolve()
{
char i,ch;
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
fgets(s,Nmax,stdin);
scanf("%d\n",&N);
for (i=0;i<N;++i)
{
scanf("%c",&ch);
a[ch-'A']^=1;
p=0;
printf("%d",eval());
}
printf("\n");
}
int main()
{
readsolve();
return 0;
}