Cod sursa(job #2015626)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 26 august 2017 20:25:37
Problema Bool Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.28 kb
#include <fstream>
#include <stack>
#include <cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
char s[1005],x;
bool a[26];
bool exp[1005];
bool op[1005];
stack<int>S;
int n,ct,k;
bool Evaluare(int poz,int last)
     {int i;
      bool val=exp[poz];
      if(poz==last)return exp[last];
       else if(op[poz]==false)return ((exp[poz])||(Evaluare(poz+1,last)));
       else {for(i=poz+1;i<=last;i++)
                {if(op[i-1]==true)
                 val=((val)&&(exp[i]));
                 else {val=((val)||(Evaluare(i,last)));
                       exp[poz]=val;
                       break;
                      }
                }
             return val;
            }
     }
bool Litera(char q)
   {if(q>='A'&&q<='Z')return 1;
      else return 0;
   }
int main()
{int i,j;
 fin.getline(s,1001);
 fin>>n;
 for(j=1;j<=n;j++)
    {fin>>x;
     a[x-65]=!(a[x-65]);
     //fout<<x<<" "<<a[x-65]<<"     ";
     ct=0;
 for(i=0;i<strlen(s);i++)
    {if(Litera(s[i])==1&&Litera(s[i+1])==0){ct++;if(exp[ct]==0){exp[ct]=a[s[i]-65];//fout<<"||";
                                                               }
                                            else exp[ct]=!(a[s[i]-65]);
                                            //fout<<exp[ct]<<" "<<ct<<"  ";
                                           }
     else if(s[i]=='N'){exp[ct+1]=true;i+=2;}
     else if(s[i]=='A'){op[ct]=true;i+=2;}
     else if(s[i]=='O'){op[ct]=false;i++;}
     else if(s[i]=='T'){ct++;if(exp[ct]==0)exp[ct]=1;
                               else exp[ct]=0;
                        //fout<<"||"<<exp[ct]<<" "<<ct<<"  ";
                        i+=3;
                       }
     else if(s[i]=='F'){ct++;if(exp[ct]==0)exp[ct]=0;
                               else exp[ct]=1;
                        //fout<<"||"<<exp[ct]<<" "<<ct<<"  ";
                        i+=4;
                       }
     else if(s[i]=='(')S.push(ct+1);
     else if(s[i]==')'){exp[S.top()]=Evaluare(S.top(),ct);for(k=S.top()+1;k<=ct;k++)exp[k]=0;ct=S.top();S.pop();//fout<<"*"<<exp[ct]<<"*"<<ct<<"  ";
                       }
    }
    fout<<Evaluare(1,ct);
    for(i=1;i<=1001;i++)
       {exp[i]=0;
        op[i]=0;
       }
    while(!S.empty())
         S.pop();
    }
}