Cod sursa(job #271697)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 5 martie 2009 20:25:40
Problema Bool Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include<stdio.h>

int n, i,a[100];
char p, e[2000];

void citire();
int EvalExpr(), EvalFactor(), EvalTermen();

int main(){
    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);
    citire();
    scanf("%d\n",&n);
    for (; n; n--){
        scanf("%c", &p);
        a[p] = 1-a[p];
        i = 0;
        printf("%d",EvalExpr());
    }

    return 0;
}

void citire(){
    gets(e);
}

int EvalExpr(){

    if (e[i] == ' ') i++;

int r = EvalTermen(),t;

    if (e[i] == ' ') i++;

    while (e[i]=='O'&& e[i+1] == 'R'){

        i+=2;
        r = (r > (t=EvalTermen()) ? r : t);

    }
    return r;
}

int EvalTermen(){
    if (e[i] == ' ') i++;

int r=EvalFactor(), t;

    if (e[i] == ' ') i++;

    while (e[i] == 'A' && a[i+1] == 'N'){

        i+=3;
        r = (r < (t = EvalFactor()) ? r : t);
    }
    return r;
}

int EvalFactor(){
    if (e[i] == ' ') i++;

int f;

    if (e[i] == 'N' && e[i+1] == 'O'){

        i += 3;
        f = 1-EvalFactor();

    }
    else

        if (e[i] == '(' ){
            i++;
            f = EvalExpr();
            i++;
        }
        else

    if (e[i] == 'T' && e[i+1] == 'R'){
        i += 4;
        f = 1;
    }
    else

        if (e[i] == 'F' && e[i+1] == 'A'){
            i += 5;
            f = 0;
        }

        else
    {
        i++;
        f= a[e[i-1]];
    }
    return f;
}