Cod sursa(job #2744605)

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

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

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

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

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

bool si() {
    bool rez = eval();
    while (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 (s[ind] == 'N' && s[ind + 1] == 'O' && s[ind + 2] == 'T') {
        ind += 4;
        rez = !eval();
    }
    else if (s[ind] == 'T' && s[ind + 1] == 'R' && s[ind + 2] == 'U' && s[ind + 3] == 'E') {
        ind += 5;
        rez = 1;
    }
    else if (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]] = !val[modific[i]];
        ind = 0;
        g << sau();
    }
    g.close();
}

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