Cod sursa(job #826633)

Utilizator mirceadinoMircea Popoveniuc mirceadino Data 30 noiembrie 2012 23:14:17
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<cstdio>
using namespace std;
bool A[27],eval(),term(),num();
char sir[1010],*p,c;
int n,i;
bool eval()
{
    bool r=term();
    while(*p=='O'&&*(p+1)=='R')
    {
        p+=3;
        r=r|term();
    }
    return r;
}
bool term()
{
    bool r=num();
    while(*p=='A'&&*(p+1)=='N')
    {
        p+=4;
        r=r&num();
    }
    return r;
}
bool num()
{
    bool r=0;
    if(*p=='(')
    {
        p++;
        r=eval();
        p++;
    }
    else if(*p=='N'&&*(p+1)=='O')
    {
        p+=4;
        r=!num();
    }
    else if(*p=='T'&&*(p+1)=='R')
    {
        p+=5;
        r=1;
    }
    else if(*p=='F'&&*(p+1)=='A')
    {
        p+=6;
        r=0;
    }
    else
    {
        r=A[*p-'A'];
        p+=2;
    }
    return r;
}
int main()
{
    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);
    gets(sir);
    scanf("%d\n",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%c",&c);
        A[c-'A']=!A[c-'A'];
        p=sir;
        printf("%d",eval());
    }
    return 0;
}