Cod sursa(job #2370096)

Utilizator MDiana15Diana M MDiana15 Data 6 martie 2019 10:43:51
Problema Bool Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f ("bool.in") ;
ofstream g ("bool.out") ;
int N , i  = 0  , k ;
int Q , fv[30];
char c;
char s[1010];
int eval() ;
int NOT() ;
int termen() ;
int factor() ;

int eval()
{
    int r = termen() ;

    while (s[i] == 'O' && s[i+1] == 'R')
    {
        i += 2;
        r = (r | termen()) ;
    }

    return r;
}
int termen()
{
        int r = NOT() ;

        while (s[i] == 'A' && s[i+1] == 'N' && s[i+2] == 'D')
        {
            i += 3;
            r = (r & NOT()) ;
        }

        return  r;

}

int NOT()
{
        int r = factor() ;
        while (s[i] == 'N' && s[i+1] == 'O' && s[i+2] == 'T')
        {
            i += 3;
            if (r == 1) r = 0 ;
            else r = 1;
        }
        return r;
}
int factor()
{
            int r = 0 ;
            if (s[i] == '(')
            {
                i ++ ;
                r = eval() ;
                i ++ ;
            }
            else
            {
                if (s[i] == 'T' && s[i+1] == 'R' && s[i+2] == 'U' && s[i+3] == 'E')
                {
                    i += 4;
                    r = 1;
                }
                else if (s[i] == 'F' && s[i+1] == 'A' && s[i+2] == 'L' && s[i+3] == 'S' && s[i+4] == 'E')
                {
                    i += 5 ;
                    r = 0;
                }
                else
                    r = fv[s[i]-'A'+1] ;
            }
            return r;

}

int main()
{

    f.getline(s,1002) ;

    f >> Q ;



    for (int q = 1 ; q <= Q ; ++q)
    {
        f >> c;

        if (fv[c-'A'+1] == 1) fv[c-'A'+1] = 0;
        else fv[c-'A'+1] = 1 ;
        //g << c << ' ' << fv[c-'A'+1] << '\n' ;
        g << eval();
    }

}