Pagini recente » Cod sursa (job #1318497) | Cod sursa (job #165538) | Cod sursa (job #392582) | Cod sursa (job #586529) | Cod sursa (job #985211)
Cod sursa(job #985211)
#include<stdio.h>
#include<cstring>
#define maxn 105
#define maxl 1005
#define maxalf 27
using namespace std;
int n,m,k;
int val[maxalf];
char s[maxl];
int disjunct();
int conjunct();
int exp();
void read()
{
fgets(s+1,sizeof(s),stdin);
n=strlen(s+1)-1;
}
void spaces(){
while(s[k]==' ') k++;
}
int non(int val){
if(val) return 0;
return 1;
}
int exp()
{
int sol,ok=0;
if(s[k]=='N' && s[k+1]=='O') {ok=1; k+=3; spaces();}
if(s[k]=='T' && s[k+1]=='R') k+=4,sol=1;
else
if(s[k]=='F' && s[k+1]=='A') k+=5,sol=0;
else
if(s[k]>='A' && s[k]<='Z') k++,sol=val[s[k-1]-'A'];
else
if(s[k]=='(') k++,spaces(),sol=disjunct(),spaces(),k++;
spaces();
if(ok) return non(sol);
return sol;
}
int conjunct()
{
int aux;
int sol=exp();
while(s[k]=='A' && s[k+1]=='N' && s[k+2]=='D')
{
aux=sol;k+=3; spaces();
sol=exp();
if(aux && sol) sol=1;
else sol=0;
}
spaces();
return sol;
}
int disjunct()
{
spaces();
int aux;
int sol=conjunct();
while(s[k]=='O' && s[k+1]=='R')
{
aux=sol; k+=2; spaces();
sol=conjunct();
if(aux || sol) sol=1;
else sol=0;
}
return sol;
}
void solve()
{
char ch;
scanf("%d\n",&m);
for(int i=1;i<=m;i++)
{
scanf("%c",&ch);
val[ch-'A']=non(val[ch-'A']);
k=1;
printf("%d",disjunct());
}
}
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
read();
solve();
fclose(stdin);
fclose(stdout);
return 0;
}