Pagini recente » Cod sursa (job #2576546) | Cod sursa (job #2182989) | Istoria paginii runda/sim04/clasament | Cod sursa (job #2603043) | Cod sursa (job #1570714)
#include <cstdio>
#include <cstring>
using namespace std;
char q[2000];
int v[1000];
int indi;
bool f1( );
bool f2( );
bool f3( );
bool f4( );
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
int n, i, j, s, t, d, k;
char lit;
fgets(q,1500,stdin);
if( q[strlen(q)] == '\n' ) q[strlen(q)-1] = '\0';
for( i = 0; i < strlen(q); ++i ){
if( q[i] == ' ' ){
strcpy(q+i,q+i+1);
}
}
//printf("%s\n",q);
scanf("%d%\n",&n);
for( i = 1; i <= n; ++i ){
scanf("%c",&lit);
indi = 0;
v[lit] = !v[lit];
if( f1() ) printf("1");
else printf("0");
}
return 0;
}
bool f1(){
bool r2, r = f2();
while( strncmp(q+indi,"OR",strlen("OR")) == 0 ){
indi += strlen("OR");
r2 = f2();
r = (r||r2);
}
return r;
}
bool f2(){
bool r2, r = f3();
while( strncmp(q+indi,"AND",strlen("AND")) == 0 ){
indi += strlen("AND");
r2 = f3();
r = (r&&r2);
}
return r;
}
bool f3(){
bool r;
while( strncmp(q+indi,"NOT",strlen("NOT")) == 0 ){
indi += strlen("NOT");
r = f3();
return !r;
}
if( q[indi] == '(' ){
indi++;
r = f1();
indi++;
}
else if( strncmp(q+indi,"TRUE",strlen("TRUE")) == 0 ){
r = 1;
indi += strlen("TRUE");
}
if( strncmp(q+indi,"FALSE",strlen("FALSE")) == 0 ){
r = 1;
indi += strlen("FALSE");
}
else{
r = v[q[indi]];
indi++;
}
return r;
}