Cod sursa(job #720797)

Utilizator ion824Ion Ureche ion824 Data 22 martie 2012 21:56:36
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<cstdio>
char a[1005],modif[105]; bool lit[30]; int i;

bool factor2();
bool factor();

bool ff(){
    bool v=factor();   
     if(a[i]==' '){ ++i; v=ff(); }
     else 
      while(a[i]=='O' && a[i+1]=='R'){ i+=2; v|=factor(); }        
  return v;  
}

bool factor(){
 bool v=factor2();
 if(a[i]==' '){ ++i; v=factor(); }
 else       
   while(a[i]=='A' && a[i+1]=='N'){ i+=3; v&=factor2(); }      
 return v;   
}

bool factor2(){
 bool v=0;
 if(a[i]==' '){ ++i; v=factor2(); }
  else
   if(a[i]=='('){ ++i; v=ff(); ++i; }
      else
        if(a[i]=='N' && a[i+1]=='O'){ i+=3; v=!factor2(); }
          else if(a[i]=='T' && a[i+1]=='R'){ i+=4; v=1; }
            else if(a[i]=='F' && a[i+1]=='A'){ i+=5; v=0; }
              else if(a[i]<='Z' && a[i]>='A'){ v=lit[a[i]-'A']; ++i; }
  return v;
}

int main(void){
    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);
    int n,j;
    gets(a);
    scanf("%d\n",&n);
    gets(modif);
    for(j=0;j<n;++j){
                 lit[modif[j]-'A']=!lit[modif[j]-'A'];
                 i=0;
                 printf("%d",ff());
                     }
 return 0;
}