Cod sursa(job #292378)

Utilizator lexu93Todor Alex lexu93 Data 31 martie 2009 08:43:15
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
#include<stdio.h>   
#include<string.h>   
long l,i,st[1005],a[1005],n,j,la,lst,f[1005];   
char expr[1005],sir[1005];   
int main()   
{   
 freopen("bool.in","r",stdin);   
 freopen("bool.out","w",stdout);   
 gets(expr);   
 l=strlen(expr);   
 for(i=0;i<l;++i)   
    {   
     if(expr[i]=='T'&&expr[i+1]=='R'){a[++la]=1;i+=3;}   
     else  
     if(expr[i]=='F'&&expr[i+1]=='A'){a[++la]=0;i+=4;}   
     else  
     if(expr[i]>='A'&&expr[i]<='Z'&&(expr[i+1]==' '||expr[i+1]==')'||i==l-1))a[++la]=expr[i];   
     else  
     if(expr[i]=='N'&&expr[i+1]=='O')   
       {while(st[lst]>-1&&lst)a[++la]=st[lst--];   
        st[++lst]=-1;   
        i+=2;}   
     else  
     if(expr[i]=='A'&&expr[i+1]=='N')   
       {while(st[lst]>=-2&&lst)a[++la]=st[lst--];   
        st[++lst]=-2;   
        i+=2;}   
     else  
     if(expr[i]=='O'&&expr[i+1]=='R')   
       {while(st[lst]>=-3&&lst)a[++la]=st[lst--];   
        st[++lst]=-3;   
        i+=1;}   
     else  
     if(expr[i]=='(')st[++lst]=-10;   
     else  
     if(expr[i]==')')   
       {while(st[lst]!=-10&&lst)a[++la]=st[lst--];   
        --lst;}   
    }   
 while(lst)a[++la]=st[lst--];   
 scanf("%ld\n",&n);   
 gets(sir);   
 for(i=1;i<=n;++i)   
    {f[sir[i-1]]=!f[sir[i-1]];   
     lst=0;   
     for(j=1;j<=la;++j)   
        {if(a[j]>2)st[++lst]=f[a[j]];   
         if(a[j]==1)st[++lst]=1;   
         if(a[j]==0)st[++lst]=0;   
         if(a[j]==-1)st[lst]=!st[lst];   
         if(a[j]==-2)st[--lst]=st[lst]&&st[lst+1];   
         if(a[j]==-3)st[--lst]=st[lst]||st[lst+1];}   
     printf("%ld",st[lst]);}   
 printf("\n");   
 return 0;   
}