Cod sursa(job #2083301)

Utilizator tanyafTanya Foransbergher tanyaf Data 7 decembrie 2017 15:09:06
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <cstdio>

using namespace std;

bool aux,v[30];
char *p,a[1005],x;
int n,i,nr;
bool eval();
bool termen();
bool factor();
bool  eval()
{
    bool r;
    r=termen();
    while(*p=='O' && *(p+1)=='R')
    {
        p+=3;
        r=r|termen();
    }
    return r;
}
bool termen()
{
    bool r;
    r=factor();
    while(*p=='A' && *(p+1)=='N')
    {
        p+=4;
        r=r&factor();
    }
    return r;
}
bool factor()
{
    bool r;
    r=false;
    if(*p=='(')
    {
        p++;
        r=eval();
        p++;
    }
    else if(*p=='T' && *(p+1)=='R')
    {
        r=true;
        p+=5;
    }
    else if(*p=='F' && *(p+1)=='A')
    {
        r=false;
        p+=6;
    }
    else if(*p=='N' && *(p+1)=='O')
    {
        p+=4;
        r=!factor();
    }
    else
    {
        if(v[*p-'A']==false)r=false;
        else r=true;
        p+=2;
    }
    return r;
}
int main()
{
    freopen("bool.in","r",stdin);
  freopen("bool.out","w",stdout);
     scanf("%c",&x);
    while(x!='\n')
    {
        a[nr++]=x;
         scanf("%c",&x);;
    }
    scanf("%d\n",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%c",&x);
        v[x-'A']=!v[x-'A'];
        p=a;
        aux=eval();
        if(aux) printf("1");
        else printf("0");
    }

    return 0;
}