Cod sursa(job #2292509)

Utilizator mihaimodiMihai Modi mihaimodi Data 29 noiembrie 2018 17:31:12
Problema Bool Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.65 kb
#include <fstream>

#include <cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");

int st1[1001],var[100],pr[100];
int n,rez,i,j,k,k1,k2;
char s[1005],st2[1001];
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(k1>1)
            {
                  rez=op(k1,k2);
                  st1[k1]=rez;
            }
            fout<<st1[k1];
      }
      return 0;

}