Cod sursa(job #2370189)

Utilizator MDiana15Diana M MDiana15 Data 6 martie 2019 11:06:16
Problema Bool Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.96 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f ("bool.in") ;
ofstream g ("bool.out") ;
int N , i  = 0  , k ;
int Q , fv[100];
char c;
char s[1010];

bool eval() ;
bool NOT() ;
bool termen() ;
bool factor() ;

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

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

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

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

        return  r;

}

bool NOT()
{
        bool r = factor();
        while (s[i] == 'N' && s[i+1] == 'O' && s[i+2] == 'T')
        {
            i += 3;
            r = !factor() ;
        }
        return r;
}
bool factor()
{
            bool 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 = true;
                }
                else if (s[i] == 'F' && s[i+1] == 'A' && s[i+2] == 'L' && s[i+3] == 'S' && s[i+4] == 'E')
                {
                    i += 5 ;
                    r = false;
                }
                else
                    r = fv[s[i]-'A'+1] ;
            }
            return r;

}

int main()
{

    f.getline(s,1002) ;
    k = strlen(s);
    f >> Q ;
    for ( i =  0 ; i < k ; ++i)
    {
            if (s[i] == ' ')
                strcpy(s + i , s + i  + 1) ;
    }


    memset(fv, 0 , sizeof(fv));
     for (int q = 1 ; q <= Q ; ++q)
    {
        f >> c;
        i = 0 ;


        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();
    }

}