Cod sursa(job #472464)

Utilizator borsoszalanBorsos Zalan borsoszalan Data 24 iulie 2010 22:21:11
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<cstdio>
#include<cstring>

using namespace std;

const int maxl=1050;

char s[maxl],a[maxl],*p,sec[maxl];

int n,i,j,v[250],k;

bool eval();
bool level1();
bool level2();

bool eval()
{
    bool rez=level1();
    while(strncmp(p,"OR",2)==0)
        p+=2,
        rez|=level1();
    return rez;
}

bool level1()
{
    bool rez=level2();
    while(strncmp(p,"AND",3)==0)
        p+=3,
        rez&=level2();
    return rez;
}

bool level2()
{
    if(strncmp(p,"TRUE",4)==0)
    {
        p+=4;
        return true;
    }
    if(strncmp(p,"FALSE",5)==0)
    {
        p+=5;
        return false;
    }

    if(strncmp(p,"NOT",3)==0)
    {
        p+=3;
        return !level2();
    }
    if(*p=='(')
    {
        ++p;
        bool rez=eval();
        ++p;
        return rez;
    }
    bool rez=(v[*p-'A']==1);
    ++p;
    return rez;
}


int main()
{
    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);

    fgets(sec,sizeof(s),stdin);
    for(i=0;sec[i]!='\n';++i)
        if(sec[i]!=' ')
            s[k++]=sec[i];
    scanf("%d\n",&n);
    fgets(a,sizeof(a),stdin);

    for(i=0;i<n;++i)
    {
        v[a[i]-'A']=!v[a[i]-'A'];
        p=s;
        printf("%d",(int)eval());
    }

    printf("\n");

    fclose(stdin);
    fclose(stdout);

    return 0;
}