Cod sursa(job #187983)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 5 mai 2008 22:08:06
Problema Bool Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include<stdio.h>

char e[2000],c;
int a[50],i,n,j,lg,rt; 

int EvalExp();
int EvalTermen();
int EvalFactor();

int main()
{
    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);
    for (i=0;e[i-1]!='\n';i++)
    {
        scanf("%c",&e[i]);
    }
    lg=i-1;
    j=-1;
    for (i=0;i<lg;i++)
        if (e[i]!=' ')
        {
                    j++;
                    e[j]=e[i];
        }
    lg=j+1;e[lg]='\0';
    scanf("%d",&n);
    scanf("%c");
    for (i=1;i<=28;i++)
        a[i]=0;
    for (rt=1;rt<=n;rt++)
    {
	scanf("%c",&c);
        if (a[c-'A']==0) a[c-'A']=1;
        else             a[c-'A']=0;
        i=0;
        printf("%d",EvalExp());
    }
    printf("\n");
    return 0;
}

int EvalExp()
{int r=EvalTermen(),q;
     while (i<lg && e[i]=='O' && e[i+1]=='R')
     {
	   i+=2;
	   q=EvalTermen();
	   if (q>r) r=q;
     }
    return r;
}

int EvalTermen()
{int f=EvalFactor(),q;
	while (e[i]=='A' && e[i+1]=='N')
	{
		i+=3;
		q=EvalFactor();
		if (q<f) f=q;
	}
	return f;
}

int EvalFactor()
{int r;
    if (e[i]=='N' && e[i+1]=='O')
    {
		  i+=3;
		  r=1-EvalTermen();
    }
    else
	if (e[i]=='(')
	{
		      i++;
		      r=EvalExp();
		      i++;
	}
	else
	    if (e[i]=='T' && e[i+1]=='R')
	    {
			  i+=4;
			  r=1;
	    }
	    else
		if (e[i]=='F' && e[i+1]=='A')
		{
			      i+=5;
			      r=0;
		}
		else
		{
		    i++;
		    r=a[e[i-1]-'A'];
		}
    return r;
}