Cod sursa(job #253195)

Utilizator 630r63Ilinca George Mihai 630r63 Data 5 februarie 2009 15:43:33
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.02 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);  
 
     scanf("%d\n", &N);  
   
     gets(valori);  
   
     for (i = 0; i < N; ++i){  
         poz = 0;  
         stare[valori[i] - 'A'] = 1 - stare[valori[i] - 'A'] ; 
         printf("%d", (int) eval());  
     }  
}