Cod sursa(job #1247792)

Utilizator Athena99Anghel Anca Athena99 Data 23 octombrie 2014 21:17:37
Problema Bool Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 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 factor(  ) {
    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 solve(  ) {
    bool res= factor();
    for ( ; *it=='A' || *it=='O'; ) {
        if ( *it=='A' ) {
            while ( *it>='A' && *it<='Z' ) ++it; ++it;
            res= res&factor();
        }
        else {
            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;
}