Cod sursa(job #2292550)

Utilizator mihaimodiMihai Modi mihaimodi Data 29 noiembrie 2018 17:54:33
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.12 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(char x)
{
    if(x=='T')
    {
        k1--;
        return !st2[k2];
    }
    if(x=='R')
    {
        k1--;k2--;
        return st2[k2]||st2[k2+1];
    }
    if(x=='D')
    {
        k1--;k2--;
        return st2[k2]&&st2[k2+1];
    }
}

int main()

{
      pr['R']=1;pr['D']=2;
      pr['T']=3;pr['(']=0;
      fin.get(s,1001);
      fin>>n;
      for(int ii=1;ii<=n;ii++)
      {
          k1=k2=0;
          fin>>car;
          var[car]=!var[car];

          for(i=0;s[i]!=0;i++)
          {
              if(s[i]>='A'&&s[i]<='Z')
              {
                  k=0;
                  while(s[i]>='A'&&s[i]<='Z')
                  {
                      k++;
                      i++;
                  }
                    i--;
                  if(k==1)
                    st2[++k2]=var[s[i]];
                  else
                    if(s[i]=='T')
                        st1[++k1]='T';
                  else
                    if(k==4)
                        st2[++k2]=1;
                    else if(k==5)
                        st2[++k2]=0;
                    else
                    {
                        while(k1>0&&pr[st1[k1]]>=pr[s[i]])
                        {
                            rez=op(st1[k1]);
                            st2[k2]=rez;
                        }
                        st1[++k1]=s[i];
                    }
              }
              else if(s[i]=='(')
                        st1[++k1]='(';
              else if(s[i]==')')
              {
                  while(st1[k1]!='(')
                    {
                        rez=op(st1[k1]);
                        st2[k2]=rez;
                    }
                    k1--;
              }
          }
          while(k1>0)
          {
              rez=op(st1[k1]);
                st2[k2]=rez;
          }
          fout<<st2[1];
      }

}