Pagini recente » Cod sursa (job #1530702) | Cod sursa (job #2535716) | Cod sursa (job #807144) | Cod sursa (job #2443505) | Cod sursa (job #87653)
Cod sursa(job #87653)
#include<stdio.h>
#include<string.h>
long val[256];
long t[1024],inchis[1024];
char c[1010];
long calc(long a,long b)
{
long valori[1024],poz =0;
memset(valori,0,sizeof(valori));
for(long i =a; i<=b;i++)
{
if(c[i]=='(')
{
long p=calc(i+1,inchis[i]-1);
if(valori[poz]==0)
valori[poz++] =p;
else valori[poz++] =!p;
i = inchis[i];
continue;
}
if(c[i]>='a' && c[i]<='z')
{
if(valori[poz]==0)
valori[poz++] = val[c[i]];
else valori[poz++] = !val[c[i]];
continue;
}
if(c[i]=='T')
{
if(valori[poz]==-1)
valori[poz] = 0;
else valori[poz++] = 1;
i+=3;
}
if(c[i]=='F')
{
if(valori[poz]==-1)
valori[poz]=1;
else valori[poz++] = 0;
i+=4;
}
if(c[i]=='A')
{
valori[poz++] = 2;
i+=2;
}
if(c[i]=='N')
{
if(valori[poz]==-1)
valori[poz] =0;
else valori[poz] = -1;
i+=2;
}
if(c[i]=='O')
{
valori[poz++] = 3;
i++;
}
}
valori[poz] = 1;
long i,j;
for(i=0;i<poz;i++)
{
if(valori[i]==2)
{
valori[i-1] = valori[i-1] &valori[i+1];
for(j=i;j<poz-2;j++)
valori[j] = valori[j+2];
poz-=2;
}
}
valori[poz] = 0;
long rez = 0;
for(i=0;i<poz;i+=2)
rez|=valori[i];
return rez;
}
int main()
{
long i,n;
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
fgets(c,1010,stdin);
long l = strlen(c),last = 0,j;
for(i=0;i<l;i++)
{
if(c[i]=='(')
{t[++last] = i;continue; }
if(c[i]==')')
for(j=last;j>=0;j--)
if(inchis[t[j]]==0)
{
inchis[t[j]] = i;break;
}
if(c[i]>='A' && c[i]<='Z' && !( c[i+1]<='Z' && c[i+1]>='A'))
c[i]=c[i]-'A'+'a';
}
scanf("%ld",&n);
for(i=1;i<=n;i++)
{
char a;
scanf("\n%c",&a);a=a-'A'+'a';
val[a] = !val[a];
printf("%ld",calc(0,strlen(c)-1));
}
}