Cod sursa(job #308911)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 28 aprilie 2009 20:54:58
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.01 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());  
    }  
  
}