Pagini recente » Istoria paginii runda/oni.test-2010_runda3/clasament | Cod sursa (job #1462666) | Cod sursa (job #1288752) | Cod sursa (job #1932340) | Cod sursa (job #1515566)
#include <cstdio>
#include <cstring>
using namespace std;
char q[1100];
int v[1000];
int indi;
void sparg( char s[], char c ){
char *p;
p = strstr(q,s);
while( p != NULL ){
*p = c;
strcpy(p+1,p+strlen(s));
p = strstr(p,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;
fgets(q,1050,stdin);
sparg("OR",'|');
sparg("AND",'&');
sparg("NOT",'!');
sparg("TRUE",'1');
sparg("FALSE",'0');
q[strlen(q)-1] = '\0';
for( i = 0; i < strlen(q); ++i ){
if( q[i] == ' ' ) strcpy(q+i,q+i+1);
}
/*
for( i = 0; i < strlen(q); ++i )
printf("%c",q[i]);
*/
//printf("\n");
//printf("%s",q);
scanf("%d%*c",&n);
for( i = 1; i <= n; ++i ){
scanf("%c",&lit);
v[lit] = !v[lit];
indi = 0;
//f1();
printf("%d",f1());
//printf("<%d>",indi);
}
printf("\n");
return 0;
}
int f1(){
int r = f2();
while( q[indi] == '|'){
indi++;
int r2 = f2();
r = r||r2;
}
return r;
}
int f2(){
int r = f3();
while( q[indi] == '&' ){
indi++;
//printf("%c",q[indi+1]);
int r2 = f3();
r = r&&r2;
}
return r;
}
int f3(){
if( q[indi] == '!' ){
indi++;
int r = f4();
return (!r);
}
else{
int r = f4();
return r;
}
}
int f4(){
int r;
if( q[indi] == '(' ){
indi++;
r = f1();
indi++;
}
else if( q[indi] >= '0' && q[indi] <= '9' ){
r = q[indi] - '0';
indi++;
}
else if ( q[indi] >= 'A' && q[indi] <= 'Z' ){
r = v[q[indi]];
indi++;
}
return r;
}