Cod sursa(job #2292554)

Utilizator mihaimodiMihai Modi mihaimodi Data 29 noiembrie 2018 17:55:58
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.86 kb

#include <fstream>



#include <cstring>

using namespace std;

ifstream fin("bool.in");

ofstream fout("bool.out");



int st1[1001],st2[1001],var[100],pr[100];

int n,rez,i,j,k,k1,k2;

char s[1005];

char car;



int op(int K1,int K2)

{

      if(st2[K2]=='N')

      {

            k2--;

            return !st1[K1];

      }

      else if(st2[K2]=='O')

      {

            k1--;k2--;

            return st1[K1]||st1[K1-1];

      }

      else if(st2[K2]=='A')

      {

            k1--;k2--;

            return st1[K1]&&st1[K1-1];

      }

}



int main()



{

      pr['O']=1;pr['A']=2;

      pr['N']=3;pr['(']=0;

      fin.get(s,1001);

      fin>>n;

      for(i=1;i<=n;i++)

      {

            k1=k2=0;

            fin>>car;

            var[car]=!var[car];

            memset(st1,0,sizeof(st1));

            memset(st2,0,sizeof(st2));

            for(j=0;s[j]!=0;j++)

            {





                  if(s[j]>='A'&&s[j]<='Z')

                  {

                        k=0;

                        while(s[j]>='A'&&s[j]<='Z')

                        {

                              k++;

                              j++;



                        }

                        if(k==1)



                              st1[++k1]=var[s[j-1]];

                        else if(k==4)

                              st1[++k1]=1;

                        else if(k==5)

                              st1[++k1]=0;

                        else if(s[j-1]=='T')

                              st2[++k2]='N';

                        else

                        {

                            char x;

                            if(s[j-1]=='R')

                                x='O';

                            else

                                x='A';

                            while(k2>0&&pr[st2[k2]]>=pr[x])

                            {

                                  rez=op(k1,k2);

                                  st1[k1]=rez;

                            }

                            st2[++k2]=x;

                        }

                        j--;



                  }

                  else if(s[j]=='(')

                              st2[++k2]='(';

                  else if(s[j]==')')

                  {

                        while(st2[k2]!='(')

                        {

                              rez=op(k1,k2);

                              st1[k1]=rez;

                        }

                        k2--;

                  }

            }

            while(k2>0)

            {

                  rez=op(k1,k2);

                  st1[k1]=rez;

            }

            fout<<st1[k1];

      }

      return 0;



}