Cod sursa(job #1248679)

Utilizator Athena99Anghel Anca Athena99 Data 25 octombrie 2014 19:54:46
Problema Bool Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <fstream>
#include <string>

using namespace std;

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

const int sigma= 26;

int val[sigma+1], n;
int solve();

string s, modif;
string::iterator it;

int termen(  ) {
    int notnum= 0;
    string::iterator p= it; ++p;
    for ( ; *it=='N' && *p=='O'; ++notnum ) {
        ++it, ++it, ++it, ++it;
        p= it; ++p;
    }

    bool res;
    if ( *it=='(' ) ++it, res= solve(), ++it;
    else {
        res= val[*it-'A'];
        p= it; ++p;
        if ( res=='T' && *p=='R' ) res= 1;
        else if ( res=='F' && *p=='A' ) res= 0;
        while ( *it>='A' && *it<='Z' ) ++it; ++it;
    }

    if ( notnum%2==1 ) res= 1-res;

    return res;
}

int factor(  ) {
    bool res= termen();
    for ( ; *it=='A'; ) {
        while ( *it>='A' && *it<='Z' ) ++it; ++it;
        res= res&termen();
    }

    return res;
}

int solve(  ) {
    bool res= factor();
    for ( ; *it=='O'; ) {
        while ( *it>='A' && *it<='Z' ) ++it; ++it;
        res= res|factor();
    }

    return res;
}

int main(  ) {
    getline( fin, s );
    fin>>n>>modif;

    for ( int i= 0; i<=sigma; ++i ) val[i]= 0;
    for ( int i= 0; i<=n-1; ++i ) {
        val[modif[i]-'A']= 1-val[modif[i]-'A'];
        it= s.begin();
        fout<<solve();
    }
    fout<<"\n";

    return 0;
}