Pagini recente » Cod sursa (job #3141538) | Cod sursa (job #783408) | Cod sursa (job #328124) | Cod sursa (job #839313) | Cod sursa (job #1570677)
#include <cstdio>
#include <cstring>
using namespace std;
char q[2000];
int v[1000];
int indi;
void sparg( char s[], char c ){
char *p;
int t = strlen(s);
p = strstr(q,s);
while( p != NULL ){
strcpy(p+1,p+t);
*p = c;
p = strstr(q,s);
}
}
int f1( );
int f2( );
int f3( );
int f4( );
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
int n, i, j, s, t, d, k;
char lit;
char *p;
fgets(q,1050,stdin);
q[strlen(q)-1] = '\0';
p = strstr(q,"OR");
t= 2;
while( p != NULL ){
strcpy(p+1,p+t);
*p = '|';
p = strstr(q,"OR");
}
p = strstr(q,"AND");
t= 3;
while( p != NULL ){
strcpy(p+1,p+t);
*p = '&';
p = strstr(q,"AND");
}
p = strstr(q,"TRUE");
t = 4;
while( p != NULL ){
strcpy(p+1,p+t);
*p = '1';
p = strstr(q,"TRUE");
}
p = strstr(q,"NOT");
t = 3;
while( p != NULL ){
strcpy(p+1,p+t);
*p = '!';
p = strstr(q,"NOT");
}
p = strstr(q,"FALSE");
t = 5;
while( p != NULL ){
strcpy(p+1,p+t);
*p = '0';
p = strstr(q,"FALSE");
}
for( i = 0; i < strlen(q); ++i ){
if( q[i] == ' ' ){
strcpy(q+i,q+i+1);
}
}
scanf("%d%*c",&n);
for( i = 1; i <= n; ++i ){
scanf("%c",&lit);
indi = 0;
v[lit-'A'] = !v[lit-'A'];
printf("%d",f1());
}
return 0;
}
int f1(){
int r2, r = f2();
while( q[indi] == '|'){
indi++;
r2 = f2();
r = (r||r2);
}
return r;
}
int f2(){
int r2, r = f3();
while( q[indi] == '&' ){
indi++;
r2 = f3();
r = (r&&r2);
}
return r;
}
int f3(){
int se = 1;
while( q[indi] == '!' ){
se = -se;
indi++;
}
int r = f4();
if( se == -1 ){
r = !r;
return r;
}
else return r;
}
int f4(){
int r = 0;
if( q[indi] == '(' ){
indi++;
r = f1();
}
else if( q[indi] >= '0' && q[indi] <= '9' ) r = q[indi] - '0';
else if ( q[indi] >= 'A' && q[indi] <= 'Z' ) r = v[q[indi]-'A'];
indi++;
return r;
}