Pagini recente » Cod sursa (job #1001917) | Cod sursa (job #694629) | Cod sursa (job #1672591) | Cod sursa (job #3282545) | Cod sursa (job #2083735)
#include <bits/stdc++.h>
using namespace std;
int x,i,n,k;
char c, s[1010], *p;
bool a[105];
bool exand();
bool exor();
bool eval();
int main()
{
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
scanf("%c", &c);
while (c!='\n')
{
s[k++]=c;
scanf("%c", &c);
}
scanf ("%d", &n);
scanf("%c", &c);
for(i=1; i<=n; i++)
a[i]=false;
for(i=1; i<=n; i++)
{
scanf ("%c", &c);
p=s; x=c-'A';
a[x]=!a[x];
if (exor()==true) printf ("1");
else printf ("0");
}
printf ("\n");
return 0;
}
///////////////////////////////////////////////////
bool exor()
{
bool r;
r=exand();
if ( *p=='O' && *(p+1)=='R')
{ p+=3; r=r|exand(); }
return r;
}
bool exand ()
{
bool r;
r=eval();
if ( *p=='A' && *(p+1)=='N' )
{ p+=4; r=r&eval(); }
return r;
}
bool eval()
{
bool r=false;
if ( *p=='(')
{
p++;
r=exor();
p++;
}
else if ( *p=='N' && *(p+1)=='O' )
{
p+=4;
r=!eval();
}
else if (*p=='F' && *(p+1)=='A')
{
r=false;
p+=6;
}
else if ( *p=='T' && *(p+1) =='R' )
{
r=true;
p+=5;
}
else
{
if (a[*p-'A']==false) r=false;
else r=true;
p+=2;
}
return r;
}