Cod sursa(job #2409273)

Utilizator SemetgTemes George Semetg Data 18 aprilie 2019 20:48:20
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.9 kb
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;

const string FILE_NAME = "bool";
const int N_MAX = 1005;

ifstream in { FILE_NAME + ".in" };
ofstream out { FILE_NAME + ".out" };

int K;
char* p;
char s[4 * N_MAX];
bool var[35];
string sol;

bool isP(char c) { return c == '(' || c == ')'; }

void init() {
    char temp[N_MAX];
    in.getline(temp + 1, N_MAX);
    
    for (int i { 1 }; temp[i]; ++i) {
        if (isP(temp[i]))
            s[K++] = ' ';
        s[K++] = temp[i];
        if (isP(temp[i]))
            s[K++] = ' ';
    }
    
    s[K] = '\0';
    K = 0;
    for (p = strtok(s, " "); p; p = strtok(nullptr, " "))
        if (strlen(p) == 1) {
            s[K++] = p[0];
        } else {
            if (p[0] == 'N')
                s[K++] = '!';
            else if (p[0] == 'O')
                s[K++] = 1;
            else if (p[0] == 'A')
                s[K++] = 2;
            else if (p[0] == 'T')
                s[K++] = -1;
            else if (p[0] == 'F')
                s[K++] = -2;
        }
    
    s[K] = '\0';
}

bool OR();

bool EXPR() {
    if (*p == '(') {
        ++p;
        bool res { OR() };
        ++p;
        return res;
    }
    
    if (*p == '!') {
        ++p;
        return !EXPR();
    }
    
    bool res;
    if (*p < 0)
        res = *p == -1 ? true : false;
    else
        res = var[*p - 'A'];
    
    ++p;
    return res;
}

bool AND() {
    bool res { EXPR() };
    while (*p == 2) {
        ++p;
        res &= EXPR();
    }
    
    return res;
}

bool OR() {
    bool res { AND() };
    while (*p == 1) {
        ++p;
        res |= AND();
    }
    
    return res;
}

void solve() {
    int n;
    in >> n;
    while (n--) {
        char c;
        in >> c;
        
        var[c - 'A'] = !var[c - 'A'];
        p = s;
        sol += '0' + OR();
    }
}


void print() {
    out << sol;
}

int main() {
    init();
    solve();
    print();
}