Cod sursa(job #3338400)

Utilizator parus_majorParus Major parus_major Data 2 februarie 2026 22:35:58
Problema Bool Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.61 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 &= 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();
        return value;
    } 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;
        val[variable] = !val[variable];

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


    return 0;
}