Cod sursa(job #876689)

Utilizator deneoAdrian Craciun deneo Data 12 februarie 2013 00:11:09
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

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

#define MAXLIT 300

int val[MAXLIT], poz;
string s;

bool solveAND();
bool solveNUMBER();

bool solveOR() {
    int sol = solveAND();

    while (s.substr(poz, 2) == "OR") {
        poz += 2;
        sol |= solveAND();
    }

    return sol;
}

bool solveAND() {
    int sol = solveNUMBER();

    while (s.substr(poz, 3) == "AND") {
        poz += 3;
        sol &= solveNUMBER();
    }

    return sol;
}

bool solveNUMBER() {
    if (s.substr(poz, 4) == "TRUE") {
        poz += 4;
        return 1;
    }
    if (s.substr(poz, 5) == "FALSE") {
        poz += 5;
        return 0;
    }

    int schimba = 0, rez;
    if (s.substr(poz, 3) == "NOT") {
        poz += 3;
        return !solveNUMBER();
    }

    if (s[poz] == '(') {
        poz += 1;
        rez = solveOR();
        poz += 1;
    }
    else {
        rez = val[s[poz]];
        poz += 1;
    }

    return rez;
}

int main() {
    int nrMod;
    char c;

    string temp;

    getline(fin, temp);

    for (int i = 0; i < temp.size(); ++i)
        if (temp[i] != ' ')
            s.push_back(temp[i]);

    fin >> nrMod;

    for (int i = 1; i <= nrMod; ++i) {
        fin >> c;
        val[c] = !val[c]; poz = 0;
        fout << solveOR();
    }
    return 0;
}