Cod sursa(job #2862954)

Utilizator ElizaTElla Rose ElizaT Data 6 martie 2022 09:45:31
Problema Bool Scor 60
Compilator cpp-64 Status done
Runda simulare_oji_clasa_a-10-a Marime 2.02 kb
#include <bits/stdc++.h>

using namespace std;

int v[30];
string s;
int poz;

int expresie();
int nr() {
    int ans = 0;
    while (s[poz] == '!') {
        ans ^= 1;
        poz++;
    }
    if (s[poz] == '0' || s[poz] == '1')
        ans ^= (s[poz++] - '0');
    else if (s[poz] >= 'A' && s[poz] <= 'Z')
        ans ^= v[(s[poz++] - 'A')];
    return ans;
}
int factor() {
    int ans = 0;
    while (s[poz] == '!') {
        ans ^= 1;
        poz++;
    }
    if (s[poz] == '(') {
        poz++;
        ans ^= expresie();
        poz++;
    }
    else
        ans ^= nr();
    return ans;
}
int termen() {
    int ans = factor();
    while (poz < s.size() && s[poz] == '&') {
        poz++;
        ans = (ans & factor());
    }
    return ans;
}
int expresie() {
    bool ans = termen(),semn = 0;
    while (poz < s.size() && s[poz] == '|') {
        poz++;
        ans |= (semn ^ factor());
    }
    return ans;
}
int main()
{
    ifstream fin("bool.in");
    ofstream fout("bool.out");
    int n,ok = 0;
    char ch;
    fin.get(ch);
    while (ch != '\n') {
        if (s.size() && ch == 'N' && s[s.size() - 1] == 'A') {
            s[s.size() - 1] = '&';
            ok = 1;
        }
        else if (s.size() && ch == 'R' && s[s.size() - 1] == 'O')
            s[s.size() - 1] = '|';
        else if (s.size() && ch == 'O' && s[s.size() - 1] == 'N') {
            s[s.size() - 1] = '!';
            ok = 1;
        }
        else if (s.size() && ch == 'A' && s[s.size() - 1] == 'F') {
            s[s.size() - 1] = '0';
            ok = 3;
        }
        else if (s.size() && ch == 'R' && s[s.size() - 1] == 'T') {
            s[s.size() - 1] = '1';
            ok = 2;
        }
        else if (!ok && ch != ' ')
            s += ch;
        else if (ok)
            ok--;
        fin.get(ch);
    }
    fin >> n;
    for (int i = 0;i < n;i++) {
        fin >> ch;
        v[ch - 'A'] ^= 1;
        poz = 0;
        fout << expresie();
    }
    return 0;
}