Cod sursa(job #2587745)

Utilizator TheGodFather2131Alexandru Miclea TheGodFather2131 Data 23 martie 2020 15:08:50
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.75 kb
//ALEXANDRU MICLEA

#include <vector>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <set>
#include <unordered_map>
#include <time.h>
#include <iomanip>
#include <deque>
#include <math.h>
#include <cmath>
#include <assert.h>
#include <stack>
#include <bitset>
#include <random>
#include <chrono>

using namespace std;

//#include <iostream>
#include <fstream>
ifstream fin("bool.in"); ofstream fout("bool.out");

//VARIABLES

string s;
int i, n;

bool val[300];

//FUNCTIONS

bool f1();
bool f2();
bool f3();
bool f4();

bool f1() {
    bool ans = f2();
    while ((i + 3) < s.size() && s.substr(i, 4) == " OR ") {
        i += 4;
        ans |= f2();
    }
    return ans;
}

bool f2() {
    bool ans = f3();
    while ((i + 4) < s.size() && s.substr(i, 5) == " AND ") {
        i += 5;
        ans &= f3();
    }
    return ans;
}

bool f3() {
    bool ans = 0;
    if ((i + 3) < s.size() && s.substr(i, 4) == "NOT ") {
        i += 4;
        ans = !f3();
    }
    else {
        ans = f4();
    }

    return ans;
}

bool f4() {
    bool ans = 0;

    if (s[i] == '(') {
        i++;
        ans = f1();
        i++;
    }
    else if ((i + 3) < s.size() && s.substr(i, 4) == "TRUE") {
        i += 4;
        ans = true;
    }
    else if ((i + 4) < s.size() && s.substr(i, 5) == "FALSE") {
        i += 5;
        ans = false;
    }
    else if ('A' <= s[i] && s[i] <= 'Z') {
        ans = val[s[i]];
        i++;
    }
    return ans;
}

//MAIN
int main() {

    getline(fin, s);
    fin >> n;
    for (int j = 1; j <= n; j++) {
        i = 0;
        char c;
        fin >> c;
        val[c] = !val[c];
        fout << f1();
    }
    return 0;
}