Cod sursa(job #2203807)

Utilizator YouDontNeedMyNameJurcut Paul YouDontNeedMyName Data 13 mai 2018 11:15:13
Problema Bool Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
int n,m,p;
char str[1005],change;

bool OR();

bool v[30];
void skip()
{
    while(str[p]==' ' && p<m)
        p++;
}
bool eval()
{
    bool a;
    if(str[p]=='(')
    {
        p++;
        a=OR();
        p++;
    }
    else if(str[p]=='T' && str[p+1]=='R')
    {
        p+=4;
        a=1;
    }
    else if(str[p]=='F' && str[p+1]=='A')
    {
        p+=5;
        a=0;
    }
    else if(str[p]=='N' && str[p+1]=='O')
    {
        p+=3;
        a=(eval()^1);
    }
    else
    {
        a=v[str[p]-'A'];
        p++;
    }
    skip();
    return a;
}
bool AND()
{
    skip();
    bool a=eval();
    skip();
    while(str[p]=='A' && str[p+1]=='N' && p<m)
    {
        p+=3;
        a&=eval();
        skip();
    }
    return a;
}
bool OR()
{
    skip();
    bool a=AND();
    skip();
    while(str[p]=='O' && str[p+1]=='R' && p<m)
    {
        p+=2;
        a|=AND();
        skip();
    }
    return a;
}
int main()
{
    in.get(str,1001);
    m=strlen(str);
    in >> n;
    for(int i=0; i<n; i++)
    {
        in >> change;
        v[change-'A']^=v[change-'A'];
        p=0;
        out << eval();
    }
    return 0;
}