Cod sursa(job #2332690)

Utilizator liviu2000Dragomirescu Liviu liviu2000 Data 31 ianuarie 2019 00:27:58
Problema Bool Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <bits/stdc++.h>

using namespace std;

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

string sir ,t;
bool val[30] ;
int i ;

bool termen() ;
bool factor() ;

bool eval()
{
    bool rez;
    rez = termen() ;
    while ( sir[i] == 'O' && sir[i+1] == 'R' )
    {
        i=i+3 ;
        rez = rez|termen();
    }
    return rez;
}

bool termen()
{
    bool rez;
    rez = factor() ;
    while ( sir[i] == 'A' && sir[i+1] == 'N'  )
    {
        i = i+4 ;
        rez = rez&factor() ;
    }
    return rez;
}

bool factor()
{
    bool rez;
    if ( sir[i] == '(' )
    {
        i++ ;
        rez = eval() ;
        i++ ;
    }
    else if ( sir[i] == 'F' && sir[i+1] == 'A' )
    {
        i = i+6 ;
        rez = false ;
    }
    else if ( sir[i] == 'T' && sir[i+1] == 'R' )
    {
        i = i+5 ;
        rez = true ;
    }
    else if ( sir[i] == 'N' && sir[i+1] == 'O' )
    {
        i = i+4 ;
        rez = !eval() ;
    }
    else
    {
        rez = val[sir[i]-'A'] ;
        i = i+2 ;
    }
    return rez;
}

int main()
{
    int n ,j;
    getline(fin,sir) ;
    fin >> n ;
    fin >> t ;
    t = '#'+t;
    for ( j = 1 ; j <= n ; j++ )
    {
        val[t[j]-'A'] = !val[t[j]-'A'] ;
        i = 0 ;
        fout << eval() ;
    }
}