Cod sursa(job #1248724)

Utilizator Athena99Anghel Anca Athena99 Data 25 octombrie 2014 21:16:47
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 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, it;
int solve();

string s, modif;

int termen(  ) {
    int res= 0;
    if ( s[it]=='(' ) {
        ++it; res= solve(), ++it;
    } else if ( s[it]=='N' && s[it+1]=='O' ) {
        while ( s[it]>='A' && s[it]<='Z' ) ++it; ++it;
        res= 1-termen();
    } else if ( s[it]=='T' && s[it+1]=='R' ) {
        while ( s[it]>='A' && s[it]<='Z' ) ++it; ++it;
        res= 1;
    } else if ( s[it]=='F' && s[it+1]=='A' ) {
        while ( s[it]>='A' && s[it]<='Z' ) ++it; ++it;
        res= 0;
    } else {
        res= val[s[it]-'A'];
        while ( s[it]>='A' && s[it]<='Z' ) ++it; ++it;
    }

    return res;
}

int factor(  ) {
    int res= termen();
    while ( s[it]=='A' && s[it+1]=='N' ) {
        while ( s[it]>='A' && s[it]<='Z' ) ++it; ++it;
        res= res&termen();
    }
    return res;
}

int solve(  ) {
    int res= factor();
    while ( s[it]=='O' && s[it+1]=='R' ) {
        while ( s[it]>='A' && s[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= 0;
        fout<<solve();
    }
    fout<<"\n";

    return 0;
}