Cod sursa(job #2258103)

Utilizator Vlad_NituNitu Vlad-Petru Vlad_Nitu Data 10 octombrie 2018 20:31:56
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f ("bool.in") ;
ofstream g ("bool.out") ;

char s[1010] , x ;
int N , p = 0 , frecv[31] , m ;
int eval() ;
int termen() ;
int factor() ;

int eval()
{
int t = termen() ;
while (s[p] == 'O' && s[p + 1] == 'R' && p < m)
{p += 3;
t = (t|termen());
}
return t ;
}

int termen()
 {
    int t = factor() ;
    while (s[p] == 'A' && s[p + 1] == 'N' && p < m)
    {
        p += 4;
        t = (t&factor()) ;
    }
    return t;
 }

 int factor()
 {
    int rasp ;
    int ok = 0 ;
    if (s[p] == '(')
    {   p ++ ;
        rasp  = eval() ;
        p ++ ;
    }
    else if (s[p] == 'N' && s[p + 1] == 'O')
    {
        p += 4;
        if (ok == 1) ok = 0 ;
        else ok = 1 ;
        rasp = factor() ;

    }
    else if (s[p] == 'F' && s[p + 1] == 'A')
    {
        p += 6;
        rasp = 0 ;

    }
    else if (s[p] == 'T' && s[p + 1] == 'R')
    {
    p += 5;
    rasp = 1;
    }

    else if (isalpha(s[p]))
    {
        rasp = frecv[s[p] -'A' + 1] ;
        p += 2;

    }
    if (ok)
    {if (rasp == 1) rasp = 0 ;
    else rasp = 1 ;
    }

    return rasp ;
 }

 int main()
 {

    f.getline(s , 1010) ;
    m = strlen(s) ;

    f >> N ;
    f.get() ;
    for (int i = 1 ; i <= N ; ++i)
    {
        f >> x ;
        if (frecv[x - 'A' + 1] == 0)    frecv[x - 'A' + 1] = 1;
        else frecv[x - 'A' + 1] = 0 ;
        p = 0 ;

        g << eval() ;


    }


 }