Cod sursa(job #2744600)

Utilizator DragosC1Dragos DragosC1 Data 24 aprilie 2021 21:28:03
Problema Bool Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <fstream>
#include <cstring>
#include <iostream>
using namespace std;

char s[1001], modific[105];
int n, ind, sz;
bool val[128];

void read() {
    ifstream f("bool.in");
    f.getline(s, 1001);
    f >> n; f.get();
    for (int i = 1; i <= n; i++)
        f >> modific[i];
    sz = strlen(s);
    f.close();
}

bool si(), sau(), eval();

bool sau() {
    int rez = si();
    while (ind + 1 < sz && s[ind] == 'O' && s[ind + 1] == 'R') {
        ind += 3;
        rez = rez || si();
    }
    return rez;
}   

bool si() {
    int rez = eval();
    while (ind + 2 < sz && s[ind] == 'A' && s[ind + 1] == 'N' && s[ind + 2] == 'D') {
        ind += 4;
        rez = rez && eval();
    }
    return rez;

} 

bool eval() {
    int rez;
    if (s[ind] == '(') {
        ind++;
        rez = sau();
        ind++;
    }
    else if (ind + 2 < sz && s[ind] == 'N' && s[ind + 1] == 'O' && s[ind + 2] == 'T') {
        ind += 4;
        rez = 1 - eval();
    }
    else if (ind + 3 < sz && s[ind] == 'T' && s[ind + 1] == 'R' && s[ind + 2] == 'U' && s[ind + 3] == 'E') {
        ind += 5;
        rez = 1;
    }
    else if (ind + 4 < sz && s[ind] == 'F' && s[ind + 1] == 'A' && s[ind + 2] == 'L' && s[ind + 3] == 'S' && s[ind + 4] == 'E') {
        rez += 6;
        rez = 0;
    }
    else {
        rez = val[s[ind]];
        ind += 2;
    }
    return rez;
}

void solve() {
    int i;
    ofstream g("bool.out");
    for (i = 1; i <= n; i++) {
        val[modific[i]] = 1 - val[modific[i]];
        ind = 0;
        g << sau();
    }
    g.close();
}

int main() {
    read();
    solve();
    return 0;
}