Cod sursa(job #297170)

Utilizator QSilverGeorge Popa QSilver Data 5 aprilie 2009 11:41:12
Problema Bool Scor 100
Compilator cpp Status done
Runda Star Trek Marime 2.08 kb
#include <cstdio>   
#include <cstdlib>   
#include <cstring>   
#include <bitset>   
  
using namespace std;   
  
bitset<26> stare;   
char s[1024],valori[1024], tmp[1024];   
int N, poz;   
  
bool eval();   
bool termen();   
bool factor();   
  
bool eval(){   
    bool rez = termen();   
  
    while (s[poz] == 'O' && s[poz + 1] == 'R'){   
        poz += 3;   
        rez = rez | termen();   
    }   
  
    return rez;   
}   
  
bool termen(){   
    bool rez = factor();   
  
    while (s[poz] == 'A' && s[poz + 1] == 'N' && s[poz + 2] == 'D'){   
        poz += 4;   
        rez = rez & factor();   
    }   
  
    return rez;   
}   
  
bool factor() {   
    bool rez;   
  
    if (s[poz] == '(') {   
        ++poz;   
        rez = eval();   
        ++poz;   
    } else  
    if (s[poz] == 'N' && s[poz + 1] == 'O' && s[poz + 2] == 'T') {   
        poz += 4;   
        rez = ! factor();   
    } else  
    if (s[poz] == 'T' && s[poz + 1] == 'R' && s[poz + 2] == 'U' && s[poz + 3] == 'E') {   
        poz += 5;   
        rez = 1;   
    } else  
    if (s[poz] == 'F' && s[poz + 1] == 'A' && s[poz + 2] == 'L' && s[poz + 3] == 'S' && s[poz + 4] == 'E') {   
        poz += 6;   
        rez = 0;   
    } else{   
        rez = stare[s[poz] - 'A'];   
        poz += 2;   
    }   
    return rez;   
}   
int main(){   
    int i, aux, len, n, m;   
    char str[1012];   
  
    freopen("bool.in", "r", stdin);   
    freopen("bool.out", "w", stdout);   
  
    gets(s);   
  
    i = -1; n = strlen(s); m = -1;   
    while (i < n) {   
        i++;   
        str[++m] = s[i];   
        while (s[i] == s[i + 1] && s[i + 1] == ' ' && i < n) i++;   
    }   
    str[++m] = 0;   
  
    strcpy(s, str);   
//puts(s);   
    scanf("%d\n", &N);   
  
    gets(valori);   
  
    for (i = 0; i < N; ++i){   
        poz = 0;   
        stare[valori[i] - 'A'] = 1 - stare[valori[i] - 'A'] ; //printf("%c %d", valori[i], (int)stare[valori[i] - 'A']);   
        printf("%d", (int) eval());   
    }   
  
}