Cod sursa(job #1117235)

Utilizator OctaDuiu Octavian Octa Data 23 februarie 2014 12:17:05
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include<cstdio>
#include<cstring>
char S[1001];
int n,k,v[27];
int termen(),factor(),eval();

int eval()
{
    int r=factor();
    while(S[k]=='O' && S[k+1]=='R' && S[k] && S[k]!=')')
    {
        k+=3;
        r|=factor();
    }
    ++k;
    if (S[k] == ' ') ++k;

    return r;
}

int factor()
{
    int r=termen();
    while (S[k]=='A' && S[k+1]=='N') k+=4, r&=termen();

  return r;
}

int termen()
{
   if (S[k]=='(') { ++k; return eval(); }
    else
     if(S[k]=='N' && S[k+1]=='O'){ k+=4; return !termen(); }
      else
       if(S[k]=='T' && S[k+1]=='R')
       {
           k+=4;
           if(S[k]==' ') ++k;

        return 1;
       }
        else
         if(S[k]=='F' && S[k+1]=='A')
         {
            k+=5;
            if (S[k] == ' ') ++k;

            return 0;
         }
         else
        {
            int r=v[S[k]-'A'];
            ++k;
            if (S[k]==' ') ++k;

             return r;
        }
}

int main()
{

    int i;
    char c;
    freopen("bool.in","r",stdin);freopen("bool.out","w",stdout);

    gets(S);
    scanf("%d\n",&n);
    for (i=0;i<n;++i)
    {

        scanf("%c", &c);
        k=0;
        v[c-'A']=!v[c-'A'];

      printf("%d",eval());
    }

  return 0;
}