Cod sursa(job #288370)

Utilizator flamecataCiobanu Alexandru-Catalin flamecata Data 25 martie 2009 19:04:29
Problema Bool Scor 100
Compilator cpp Status done
Runda aa Marime 1.76 kb
#include <stdio.h>   
  
char Expression[1001], *p=Expression;   
int Alphabet[30];   
  
int EvaluateExpression();   
int EvaluateOr();   
int EvaluateAnd();   
int EvaluateNot();   
  
int EvaluateExpression()   
{   
    int Result;   
    Result=EvaluateOr();   
    while(*p == 'O' && *(p+1) == 'R')   
    {   
        p+=3;   
        Result|=EvaluateOr();   
    }   
    return Result;   
}   
  
int EvaluateOr()   
{   
    int Result;   
    Result=EvaluateAnd();   
    while(*p == 'A' && *(p+1) == 'N' && *(p+2) == 'D')   
    {   
        p+=4;   
        Result&=EvaluateAnd();   
    }   
    return Result;   
}   
  
int EvaluateAnd()   
{   
    int Result;   
       
    if(*p=='(')   
    {   
        ++p;   
        Result=EvaluateExpression();   
        ++p;   
    }   
    else   
        if(*p == 'N' && *(p+1) == 'O' && *(p+2) == 'T')   
        {   
            p+=4;   
            Result=EvaluateAnd()^1;   
        }   
    else   
        if(*p=='F' && *(p+1)=='A' && *(p+2)=='L' && *(p+3)=='S' && *(p+4)=='E')   
            p+=6, Result=0;   
    else   
        if(*p=='T' && *(p+1)=='R' && *(p+2)=='U' && *(p+3)=='E')   
            p+=5, Result=1;   
    else   
        Result=Alphabet[*p-'A'], p+=2;   
    return Result;   
}   
int main ()   
{   
    char c;   
    int N, i;   
    freopen("bool.in", "r", stdin);   
    freopen("bool.out", "w", stdout);   
  
    do   
    {   
        scanf("%c", p++);   
    }   
    while(*(p-1)!='\n');   
       
    scanf("%d\n", &N);   
    for(i=0; i<N; ++i)   
    {   
        scanf("%c", &c);   
        Alphabet[c-'A']^=1;   
        p=Expression;   
        printf("%d", EvaluateExpression());   
    }   
    return 0;   
}