Pagini recente » Cod sursa (job #2279637) | Cod sursa (job #1656675) | Cod sursa (job #2694037) | Cod sursa (job #1853552) | Cod sursa (job #301867)
Cod sursa(job #301867)
#include <cstdio>
#include <cstring>
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define IN "bool.in"
#define OUT "bool.out"
int N,hmax = 3;
char *p,A[1<<10],S[1<<10];
bool V[1<<10];
void scan()
{
freopen(IN,"r",stdin);
freopen(OUT,"w",stdout);
fgets(A,1<<10,stdin);
scanf("%d\n",&N);
fgets(S,1<<10,stdin);
}
int eval();int f1();int f2();int f3();
int eval()
{
int r = 0;
for(r = f1();*p == '|';++p, r |= f1() );
return r;
}
int f1()
{
int r = 0;
for(r = f2();*p == '&';++p, r &= f2() );
return r;
}
int f2()
{
int r = 0;
for(r = f3();*p == '!';++p,r != f3() );
return r;
}
int f3()
{
int r = 0;
if(*p == '(')
{
++p;
r = eval();
++p;
}
else
{
if( (*p >= 'A' && *p <= 'Z') || *p == '0' || *p == '1')
r = V[(int) *p ], ++p;
}
return r;
}
void solve()
{
int j(-1);
V[(int)'1'] = 1;
for(int i=0;A[i] != '\n' && A[i] != '\0';++i)
{
if(A[i] == ' ')
continue;
if(A[i] == 'T' && A[i+1] == 'R')
{
A[++j] = '1';
i += 4;
continue;
}
if(A[i] == 'F' && A[i+1] == 'A')
{
A[++j] = '0';
i += 5;
continue;
}
if(A[i] == 'A' && A[i+1] == 'N')
{
A[++j] = '&';
i += 3;
continue;
}
if(A[i] == 'O' && A[i+1] == 'R')
{
A[++j] = '|';
i += 2;
continue;
}
if(A[i] == 'N' && A[i+1] == 'O')
{
A[++j] = '!';
i += 3;
continue;
}
A[++j] = A[i];
}
A[++j] = '\0';
// FOR(i,0,j-1)
// printf("%c",A[i]);
FOR(i,0,N-1)
{
p = A;
V[ (int)S[i] ] = !V[ (int)S[i] ];
printf("%d",eval() );
}
}
int main()
{
scan();
solve();
return 0;
}