Cod sursa(job #3338409)

Utilizator parus_majorParus Major parus_major Data 2 februarie 2026 22:51:14
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.02 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <string>

using namespace std;

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

const int MAXCHAR = 'Z' + 2;

bool val[MAXCHAR];
string s;
int i, N;

bool OR();
bool AND();
bool TERM();

void skip_space() {
    if (i < s.length() && s[i] == ' ') ++i;
}

bool OR() {
    bool value = AND();
    while (i + 1 < s.length() && s[i] == 'O' && s[i + 1] == 'R') {
        i = i + 2;
        skip_space();
        bool next_value = AND();
        value |= next_value;
    }
    return value;
}

bool AND() {
    bool value = TERM();
    while (i + 2 < s.length() && s[i] == 'A' && s[i + 1] == 'N' && s[i + 2] == 'D') {
        i = i + 3;
        skip_space();
        bool next_value = TERM();
        value &= next_value;
    }
    return value;
}

bool TERM() {
    bool value = false;
    if (i + 2 < s.length() && s[i] == 'N' && s[i + 1] == 'O' && s[i + 2] == 'T') {
        i = i + 3;
        skip_space();
        value = TERM();
        value = !value;
    } else if (i < s.length() && s[i] == '(') {
        i = i + 1;
        skip_space();
        value = OR();
        i = i + 1;
        skip_space();
    } else if (i + 3 < s.length() && s[i] == 'T' && s[i + 1] == 'R' && s[i + 2] == 'U' && s[i + 3] == 'E') {
        i = i + 4;
        skip_space();
        value = true;
    } else if (i + 4 < s.length() && s[i] == 'F' && s[i + 1] == 'A' && s[i + 2] == 'L' && s[i + 3] == 'S' && s[i + 4] == 'E') {
        i = i + 5;
        skip_space();
        value = false;
    } else {
        value = val[s[i]];
        i = i + 1;
        skip_space();
    }

    return value;
}
int main()
{
    getline(fin, s);
    fin >> N;
    for (int t = 0; t < N; ++t) {
        char variable;
        fin >> variable;
        if (variable == 'U') {
            cout << 'T';
        }
        val[variable] = !val[variable];

        i = 0;
        fout << OR() ? '1' : '0';
    }


    return 0;
}