Pagini recente » Arhiva de probleme | Cod sursa (job #145564) | Cod sursa (job #638527) | Cod sursa (job #1255656) | Cod sursa (job #187964)
Cod sursa(job #187964)
#include<stdio.h>
#include<string.h>
char e[2000],c;
int n,lg,i,j,a[200];
int EvalExp();
int EvalTermen();
inline int min(int,int);
inline int max(int,int);
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
i=0;
scanf("%c",&e[0]);
while (e[i]!='\n'){
i++;
scanf("%c",&e[i]);
if (e[i]==' ')
i--;
}
lg=i;
scanf("%d\n",&n);
for (i=1;i<=200;i++)
a[i]=0;
for (j=1;j<=n;j++)
{
scanf("%c",&c);
if (a[c]==0) a[c]=1;
else
a[c]=0;
i=0;
printf("%d",EvalExp());
}
printf("\n");
return 0;
}
int EvalExp()
{int r=EvalTermen();
while ((i<lg) && ((e[i]=='A' && e[i+1]=='N')||(e[i]=='O' && e[i+1]=='R')))
{
if (e[i]=='A')
{
i+=3;
r=min(r,EvalTermen());
}
else
{
i+=2;
r=max(r,EvalTermen());
}
}
return r;
}
int EvalTermen()
{int f=0;
if (e[i]=='N' && e[i+1]=='O')
{
i+=3;
f=1-EvalTermen();
return f;
}
else
if (e[i]=='('){
i++;
f=EvalExp();
i++;
return f;
}
else
{
if (e[i]=='T' && e[i+1]=='R'){
i+=4;
return 1;
}
if (e[i]=='F' && e[i+1]=='A'){
i+=5;
return 0;
}
if (e[i]>='A' && e[i]<='Z')
{
i++;
return a[e[i-1]];
}
return 1;
}
}
inline int min(int a, int b){
if (a<b)return a;
else return b;
}
inline int max(int a,int b){
if(a>b)return a;
else return b;
}