Cod sursa(job #990522)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 28 august 2013 15:54:47
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <stdio.h>
#include <string.h>

#define NMAX 1010

char a[NMAX], b[NMAX];
int n, m, k, poz, p;

bool c[NMAX], Ans;

bool termen();
bool factor();

bool expr() {
    bool Ans = termen();
    while (a[p] == 'O' && a[p + 1] == 'R'){/// OR
        p += 3;
        Ans = Ans | termen();
    }
    return Ans;
}

bool termen() {
    bool Ans = factor();
    while (a[p] == 'A' && a[p + 1] == 'N'){/// AND
        p += 4;
        Ans = Ans & factor();
    }
    return Ans;
}

bool factor(){
    bool Ans;
    if (a[p] == '('){
        ++ p;
        Ans = expr();
        ++ p;
    }
    else
        if (a[p] == 'N' && a[p + 1] == 'O'){/// NOT
            p += 4;
            Ans = ! factor();
        }
        else
            if (a[p] == 'T' && a[p + 1] == 'R'){/// TRUE
                Ans = 1;
                p += 5;
            }
            else
                if (a[p] == 'F' && a[p + 1] == 'A'){///  FALSE
                    Ans = 0;
                    p += 6;
                }
                else{
                    Ans = c[a[p] - 'A'];
                    p += 2;
                }

    return Ans;
}

int main(){
    freopen("bool.in", "r", stdin);
    freopen("bool.out", "w", stdout);
    gets(a);
    n = strlen(a);
    m = -1;
    for(int i = 0; i < n; ++ i){
        b[++ m] = a[i];
        while(a[i] == a[i + 1] && a[i + 1] == ' ' && i < n)
            ++ i;
    }
    b[++ m] = '\0';
    strcpy(a, b);
    scanf("%d\n", &n);
    scanf("%s", b);
    for(int i = 0; i < n; i++) {
        c[b[i] - 65] = 1 - c[b[i] - 65];
        p = 0;
        Ans = expr();
        printf("%d", Ans);
    }
    printf("\n");
    return 0;
}