Cod sursa(job #720343)

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

bool factor2();
bool factor();

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

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

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