Cod sursa(job #3138226)

Utilizator AlexanderCernyCernaianu Alexandru AlexanderCerny Data 18 iunie 2023 11:00:27
Problema Bool Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 4.15 kb
#include <fstream>

using namespace std;

ifstream fin ("bool.in");
ofstream fout("bool.out");

int n,i,j,pr[250],k1,k2;
char s[1002],c;
int var[1002];
char op[1002];
int main()
{
    pr['n']=3;
    pr['o']=1;
    pr['a']=2;
    fin.getline(s,1001);
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>c;
        pr[c]=1-pr[c];
        ///evaluam expresia
        k1=k2=0;
        for(j=0;s[j]!=0;j++)
            if(s[j]=='(')
                op[++k1]='(';
            else
                if(s[j]==')')
                {
                    while(op[k1]!='(')
                    {
                        if(op[k1]=='n')
                        {
                            var[k2]=1-var[k2];
                            k1--;
                        }
                        else
                            if(op[k1]=='a')
                            {
                                var[k2-1]=var[k2] && var[k2-1];
                                k2--;
                                k1--;
                            }
                            else
                            {
                                var[k2-1]=var[k2] || var[k2-1];
                                k2--;
                                k1--;
                            }
                    }
                    k1--;
                }
                else
                    if(s[j]=='N' && s[j+1]=='O')
                        op[++k1]='n';
                    else
                        if(s[j]=='A' && s[j+1]=='N')
                        {
                            while(k1>0 && pr[op[k1]]>=pr['a'])
                            {
                                if(op[k1]=='n')
                                {
                                    var[k2]=1-var[k2];
                                    k1--;
                                }
                                else if(op[k1]=='a')
                                {
                                    var[k2-1]=var[k2] && var[k2-1];
                                    k2--;
                                    k1--;
                                }
                            }
                            op[++k1]='a';
                        }
                        else
                            if(s[j]=='O' && s[j+1]=='R')
                            {
                                while(k1>0 && pr[op[k1]]>=pr['o'])
                                {
                                    if(op[k1]=='n')
                                    {
                                        var[k2]=1-var[k2];
                                        k1--;
                                    }
                                    else
                                        if(op[k1]=='a')
                                        {
                                            var[k2-1]=var[k2] && var[k2-1];
                                            k2--;
                                            k1--;
                                        }
                                        else
                                        {
                                            var[k2-1]=var[k2] || var[k2-1];
                                            k2--;
                                            k1--;
                                        }
                                }
                                op[++k1]='o';
                            }
                            else
                            {
                                if(s[j]!=' ')
                                    var[++k2]=pr[s[j]];
                            }
        while(k1>0)
        {
            if(op[k1]=='n')
            {
                var[k2]=1-var[k2];
                k1--;
            }
            else if(op[k1]=='a')
            {
                var[k2-1]=var[k2] && var[k2-1];
                k2--;
                k1--;
            }
            else
            {
                var[k2-1]=var[k2] || var[k2-1];
                k2--;
                k1--;
            }
        }
        fout<<var[1];
    }
    return 0;
}