Cod sursa(job #4238)

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

void read(void)
{ freopen("bool.in","r",stdin);
  gets(e);
  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; }