Cod sursa(job #4240)

Utilizator sealTudose Vlad seal Data 1 ianuarie 2007 17:51:53
Problema Bool Scor 50
Compilator c Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<stdio.h>
char e[1001],s[101];
int v[26],n,p;
int evalexp(void);

void read(void)
{ int k=-1;
  freopen("bool.in","r",stdin);
  while(1)
  { scanf("%c",&e[++k]);
    if(e[k]=='\n')
    { e[k]=0;
      break; } }
  scanf("%d%s",&n,s); }

int evalop2(void)
{ int r,n=0;
  if(e[p]=='N'&&e[p+1]=='O') { n=1; p+=4; }
  if(e[p]=='T'&&e[p+1]=='R') { r=1; p+=4; }
  else
    if(e[p]=='F'&&e[p+1]=='A') { r=0; p+=5; }
    else
      if(e[p]=='(') { p++; r=evalexp(); p++; }
      else { r=v[e[p]-'A']; p++; }
  return n?!r:r; }

int evalop1(void)
{ int r=evalop2();
  while(e[p]&&e[p+1]=='A')
  { p+=5;
    r&=evalop2(); }
  return r; }

int evalexp(void)
{ int r=evalop1();
  while(e[p]&&e[p]!=')')
  { p+=4;
    r|=evalop1(); }
  return r; }

void solve(void)
{ int i;
  freopen("bool.out","w",stdout);
  for(i=0;i<n;i++,p=0)
  { v[s[i]-'A']=!v[s[i]-'A'];
    printf("%d",evalexp()); }
  printf("\n"); }

int main(void)
{ read();
  solve();
  return 0; }