Cod sursa(job #263845)

Utilizator eugen.nodeaEugen Nodea eugen.nodea Data 20 februarie 2009 21:08:32
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#define NMAX 1201
char s[NMAX],c,*p;
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;
 if (*p=='('){
     p++;
     r=eval();
     p++;
    }
  else if (*p=='N' && *(p+1)=='O' && *(p+2)=='T'){
     p+=4;
     r=!factor();
    }
   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; p=s;
       printf("%d", eval());
      }
  printf("\n");
  return 0;
}