Cod sursa(job #2290973)

Utilizator mihaimodiMihai Modi mihaimodi Data 27 noiembrie 2018 11:27:22
Problema Bool Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.79 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");

int st1[1000],var[100],pr[100];
int n,rez,i,j,k,k1,k2;
char s[1005],st2[1000];
char car;

int op(int K1,int K2)
{
      if(st2[K2]=='N')
      {
            k2--;
            return !st1[K1];
      }
      else if(st2[K2]=='O')
      {
            k1--;k2--;
            if(st1[K1]||st1[K1-1])
                  return 1;
            return 0;
      }
      else if(st2[K2]=='A')
      {
            k1--;k2--;
            if(st1[K1]&&st1[K1-1])
                  return 1;
            return 0;
      }

}
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]==' ')
                        continue;
                  if(s[j]>='A'&&s[j]<='Z')
                  {
                        k=0;
                        while(s[j]>='A'&&s[j]<='Z')
                        {
                              k++;
                              j++;
                        }

                        j--;
                        if(k==1)
                              st1[++k1]=var[s[j]];

                        else if(s[j-k+1]=='T')
                              st1[++k1]=1;
                        else if(s[j-k+1]=='F')
                              st1[++k1]=0;

                        else if(s[j-k+1]=='A')
                              st2[++k2]='A';
                        else if(s[j-k+1]=='O')
                              st2[++k2]='O';
                        else if(s[j-k+1]=='N')
                              st2[++k2]='N';
                  }
                  else if(s[j]=='(')
                              st2[++k2]='(';
                  else if(s[j]==')')
                  {
                        while(st2[k2]!='(')
                        {
                              rez=op(k1,k2);
                              st1[k1]=rez;
                        }
                        k2--;
                  }
                  else
                  {
                        while(k2>0&&pr[st2[k2]]>=pr[s[j]])
                        {
                               rez=op(k1,k2);
                               st1[k1]=rez;
                        }
                        st2[++k2]=s[j];
                  }
            }
            while(k1>1&&k2!=0)
            {
                  rez=op(k1,k2);
                  st1[k1]=rez;
            }
            fout<<st1[k1];
      }
      return 0;
}