Pagini recente » Cod sursa (job #1326631) | Cod sursa (job #207708) | Cod sursa (job #1292558) | Cod sursa (job #2322466) | Cod sursa (job #472464)
Cod sursa(job #472464)
#include<cstdio>
#include<cstring>
using namespace std;
const int maxl=1050;
char s[maxl],a[maxl],*p,sec[maxl];
int n,i,j,v[250],k;
bool eval();
bool level1();
bool level2();
bool eval()
{
bool rez=level1();
while(strncmp(p,"OR",2)==0)
p+=2,
rez|=level1();
return rez;
}
bool level1()
{
bool rez=level2();
while(strncmp(p,"AND",3)==0)
p+=3,
rez&=level2();
return rez;
}
bool level2()
{
if(strncmp(p,"TRUE",4)==0)
{
p+=4;
return true;
}
if(strncmp(p,"FALSE",5)==0)
{
p+=5;
return false;
}
if(strncmp(p,"NOT",3)==0)
{
p+=3;
return !level2();
}
if(*p=='(')
{
++p;
bool rez=eval();
++p;
return rez;
}
bool rez=(v[*p-'A']==1);
++p;
return rez;
}
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
fgets(sec,sizeof(s),stdin);
for(i=0;sec[i]!='\n';++i)
if(sec[i]!=' ')
s[k++]=sec[i];
scanf("%d\n",&n);
fgets(a,sizeof(a),stdin);
for(i=0;i<n;++i)
{
v[a[i]-'A']=!v[a[i]-'A'];
p=s;
printf("%d",(int)eval());
}
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}