Cod sursa(job #1453781)

Utilizator CollermanAndrei Amariei Collerman Data 24 iunie 2015 18:10:29
Problema Bool Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include<fstream>
using namespace std;
ofstream fout("bool.out");
ifstream fin("bool.in");
const int MMAX = 1005;
const int NMAX = 105;

int n, val[28];
char exp[MMAX], yolo[NMAX], *p = exp;

int sau();
void sterge() { if( *p == ' ') p++; }

int eval()
{
    sterge();
    int sol = 0;

        if(*p == 'N' && *(p+1) == 'O') {
            p += 3;
            sol = 1 - eval();
        }
        else if(*p == '(') {
            p++;
            sol = sau();
            p++;
        }
        else if(*p == 'T' && *(p+1) == 'R') {
            sol = 1;
            p += 4;
        }
        else if(*p == 'F' && *(p+1) == 'A') {
            sol = 0;
            p += 5;
        }
        else {
            sol = val[*p - 'A' + 1];
            p++;
        }

    sterge();

    return sol;
}

int si()
{
    sterge();
    int sol = eval();

    if(*p == 'A' && *(p+1) == 'N') {
        p += 3;
        sol = ( sol && eval() );
    }
    sterge();

    return sol;
}

int sau()
{
    sterge();
    int sol = si();

    if(*p == 'O' && *(p+1) == 'R') {
        p += 2;
        sol = ( sol || si() );
    }
    sterge();

    return sol;
}

int main()
{
    int x;
    fin.getline(exp, MMAX);
    fin >> n;

    for(int i=1; i<=n; i++) {
        fin >> yolo[i];
        val[yolo[i] - 'A' + 1] = 1 - val[yolo[i] - 'A' + 1];
        fout << sau();
        p = exp;
    }

    fin.close();
    fout.close();
    return 0;
}