Cod sursa(job #1499507)

Utilizator eu3neuomManghiuc Teodor-Florin eu3neuom Data 10 octombrie 2015 18:39:29
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("bool.in");
ofstream fout("bool.out");

const int NMax = 1e3 + 5;

int k;

char *p;
char s[NMax];
bool value[30];

bool Termen();
bool Factor();

bool Solve(){
    bool r = Termen();
    while(*p == 'O' && *(p + 1) == 'R'){
        p += 2;
        r |= Termen();
    }
    return r;
}

bool Termen(){
    bool r = Factor();
    while(*p == 'A' && *(p + 1) == 'N'){
        p += 3;
        r &= Factor();
    }
    return r;
}

bool Factor(){
    bool r = 0;
    if(*p == 'N' && *(p + 1) == 'O'){
        p += 3;
        r |= !Factor();
    } else {
        if(*p == 'T' && *(p + 1) == 'R'){
            p += 4;
            r = 1;
        } else {
            if(*p == 'F' && *(p + 1) == 'A'){
                p += 5;
                r = 0;
            } else {
                if(*p == '('){
                    p++;
                    r = Solve();
                    p++;
                } else {
                    r = value[*p - 'A'];
                    p++;
                }
            }
        }
    }
    return r;
}

int main(){
    int n;
    char c;
    while(fin.get(c) && c != '\n'){
        if(c != ' ') s[k++] = c;
    }
    fin >> n;
    while(n--){
        fin >> c;
        value[c - 'A'] ^= 1;
        p = s;
        fout << Solve();
    }
    return 0;
}