Cod sursa(job #2435126)

Utilizator GabyD002Dobrita Gabriel GabyD002 Data 3 iulie 2019 11:12:35
Problema Bool Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.46 kb
#include <bits/stdc++.h>
#define NM 1005
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");

int i,fr[NM];
string s;

int Eval();
int Factori();
void Solve();

int main()
{   Solve();
    return 0;
}

void Solve()
{   int n;
    char exp[NM];
    f.get(exp,NM);
    int lg=strlen(exp);
    for(int i=0; i<lg;)
    {   if((!i && exp[i]>='A' && exp[i]<='Z' && exp[i+1]==' ') || (i==n-1 && exp[i-1]==' ' && exp[i]>='A' && exp[i]<='Z') || ((exp[i-1]==' ' || exp[i-1]=='(') && (exp[i+1]==' ' || exp[i+1]==')') && (exp[i]>='A' && exp[i]<='Z')))
        {   exp[i]=exp[i]+32;
            i++;
        }
        else
            if(exp[i]=='N' && exp[i+1]=='O')
            {   exp[i+3]='-';
                exp[i+4]=exp[i+4]+32;
                exp[i]=exp[i+1]=exp[i+2]=' ';
                i+=5;
            }
            else
                if(exp[i]=='T' && exp[i+1]=='R')
                {   exp[i]='1';
                    exp[i+1]=exp[i+2]=exp[i+3]=' ';
                    i+=4;
                }
                else
                    if(exp[i]=='F' && exp[i+1]=='A')
                    {   exp[i]='0';
                        exp[i+1]=exp[i+2]=exp[i+3]=exp[i+4]=' ';
                        i+=5;
                    }
                    else
                        if(exp[i]=='A' && exp[i+1]=='N')
                        {   exp[i+1]=exp[i+2]=' ';
                            i+=3;
                        }
                        else
                            if(exp[i]=='O' && exp[i+1]=='R')
                            {   exp[i+1]=' ';
                                i+=2;
                            }
                            else i++;
    }
    char *p=strtok(exp," ");
    while(p)
    {   s+=p;
        p=strtok(NULL," ");
    }
    string t;
    f>>n>>t;
    for(int k=0; k<n; k++)
    {   fr[int(t[k]+32)]=!fr[int(t[k]+32)];
        i=0;
        g<<Eval();
    }
}

int Eval()
{   int r=Factori();
    while(s[i]=='A' || s[i]=='O')
    {   if(s[i]=='A')
        {   i++;
            r*=Factori();
        }
        else
        {   i++;
            r+=Factori();
            if(r==2) r--;
        }
    }
    return r;
}

int Factori()
{   int r;
    if(s[i]=='(')
    {   i++;
        r=Eval();
        i++;
    }
    else
    {   if(s[i]=='-')
        {   i++;
            r=!fr[int(s[i])];
        }
        else r=fr[int(s[i])];
        i++;
    }
    return r;
}