Cod sursa(job #2940113)

Utilizator Luka77Anastase Luca George Luka77 Data 14 noiembrie 2022 20:58:23
Problema Bool Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.04 kb
#include <bits/stdc++.h>
using namespace std;

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

///***************************************************
const int NMAX = 1005;
int m, pointer = 0;
char s[NMAX];
bitset <30> logic;

///***************************************************
int expresie();
int AND();
int NOT();

///***************************************************
inline int expresie()
{
    int v = AND();
    while(s[pointer] == 'O' && s[pointer + 1] == 'R')
    {
        if(s[pointer] == 'O' && s[pointer + 1] == 'R')
        {
            pointer+=3;
            v|=AND();
        }
    }
    return v;
}

inline int AND()
{
    int v = NOT();
    while(s[pointer] == 'A' && s[pointer + 1] == 'N' && s[pointer + 1] == 'D')
    {
        if(s[pointer] == 'A' && s[pointer + 1] == 'N' && s[pointer + 1] == 'D')
        {
            pointer+=4;
            v&=NOT();
        }
    }
    return v;
}

inline int NOT()
{
    bool ans;
    if(s[pointer] == '(')
        ans = expresie(), pointer++;
    else if(s[pointer] == 'T' && s[pointer + 1] == 'R' && s[pointer + 2] == 'U' && s[pointer + 3] == 'E')
    {
        pointer+=5;
        return 1;
    }
    else if(s[pointer] == 'F' && s[pointer + 1] == 'A' && s[pointer + 2] == 'L' && s[pointer + 3] == 'S' && s[pointer + 4] == 'E')
    {
        pointer+=6;
        return 0;
    }
    else if(s[pointer] == 'N' && s[pointer] == 'O' && s[pointer] == 'T')
    {
        pointer+=4;
        ans=!NOT();
    }
    else
    {
        ans = logic[s[pointer] - 'A'];
        pointer+=2;
    }
    return ans;
}

///***************************************************
inline void solve(const char &c)
{
    logic[c - 'A'] = !logic[c - 'A'];
    fout << expresie();
    pointer = 0;
}

///***************************************************
int main()
{
    fin.getline(s, NMAX);
    fin >> m;
    while(m--)
    {
        char c;
        fin >> c;
        solve(c);
    }
}