Cod sursa(job #263415)

Utilizator eugen.nodeaEugen Nodea eugen.nodea Data 20 februarie 2009 12:51:57
Problema Bool Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <stdio.h>     
#define NMAX 1201   
char s[NMAX],c,*p=s;
int i,n,e[50],l;
int eval();
int factor();
int termen();

int eval()
{
 int r=termen();
 while (*p=='O' && *(p+1)=='R')
    {
     p+=3;
     r=r | termen();
    }
 return r;
}

int termen()
{
 int r=factor();
 while (*p=='A' && *(p+1)=='N' && *(p+2)=='D')
    {
     p+=4;
     r=r & factor();   
    }   
 return r;   
}   
  
int factor()   
{   
 int r=0;   
  
 if (*p=='N' && *(p+1)=='O' && *(p+2)=='T')
    {
     p+=4;
     r=factor();
     return !r;
    }
 if (*p=='(')
    {
     p++;
     r=eval();
     p++;
    }
  else
    if (*p=='T' && *(p+1)=='R' && *(p+2)=='U' && *(p+3)=='E')
     {
      p+=5;
      r=1;
     }
  else
    if (*p=='F' && *(p+1)=='A' && *(p+2)=='L' && *(p+3)=='S' && *(p+4)=='E')
     {
      p+=6;
      r=0;
     }
  else  
      {   
       r=e[*p-'A'];
       p+=2;
      }   
 return r;   
}
  
int main()   
{   
  freopen("bool.in","r",stdin);   
  freopen("bool.out","w",stdout);   
  fgets(s,NMAX,stdin);
  scanf("%d\n", &n);   
  for (i=1;i<=n;i++)   
      {   
       scanf("%c", &c);   
       e[c-'A']=e[c-'A']^1;
       printf("%d", eval());
      }
  printf("\n");
  return 0;
}