Cod sursa(job #2469882)

Utilizator stefantagaTaga Stefan stefantaga Data 8 octombrie 2019 10:41:34
Problema Bool Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3.27 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int v[1005],q,n,n1,nr,i,j,val1[1005],poz;
char s[1005],ch;
int eval();
int termen();
int eval()
{
    int val=termen();
    while (v[poz]==-3||v[poz]==-5)
    {
        if (v[poz]==-3)
        {
            val=val&termen();
        }
        else
        {
            val=val|termen();
        }
        poz++;
    }
    return val;
}
int termen()
{
    int val=0,semn;
    if (v[poz]==-1)
    {
        poz++;
        val=eval();
        poz++;
    }
    semn=0;
    while (v[poz]>0||v[poz]==-4||v[poz]==-6||v[poz]==-7)
    {
        if (v[poz]==-4)
        {
            semn=1;
        }
        else
        {
            if (v[poz]==-6)
            {
                val=0;
            }
            else
            if (v[poz]==-7)
            {
                val=1;
            }
            else
            {
                val=val1[v[poz]];
            }
            break;
        }
        poz++;
    }
    if (semn==1)
    {
        return 1-val;
    }
    return val;
}
int main()
{
    f.getline(s,1005);
    f>>n;
    n1=strlen(s);
    for (j=0;j<n1;j++)
    {
        if (s[j]=='(')
        {
            v[++q]=-1;
        }
        else
        if (s[j]==')')
        {
            v[++q]=-2;
        }
        else
        if ('A'<=s[j]&&s[j]<='Z')
        {
            if (s[j]=='A')
            {
                if (s[j+1]=='N'&&s[j+2]=='D')
                {
                    v[++q]=-3;
                    j=j+2;
                }
                else
                {
                    v[++q]=1;
                }
            }
            else
            if (s[j]=='N')
            {
                if (s[j+1]=='O'&&s[j+2]=='T')
                {
                    v[++q]=-4;
                    j=j+2;
                }
                else
                {
                    v[++q]=s[j]-'A'+1;
                }
            }
            else
            if (s[j]=='O')
            {
                if (s[j+1]=='R')
                {
                    v[++q]=-5;
                    j=j+1;
                }
                else
                {
                    v[++q]=s[j]-'A'+1;
                }
            }
            else
            if (s[j]=='T')
            {
                if (s[j+1]=='R')
                {
                    v[++q]=-7;
                    j=j+3;
                }
                else
                {
                    v[++q]=s[j]-'A'+1;
                }
            }
            else
            if (s[j]=='F')
            {
                if (s[j+1]=='A')
                {
                    v[++q]=-6;
                    j=j+3;
                }
                else
                {
                    v[++q]=s[j]-'A'+1;
                }
            }
            else
            {
                v[++q]=s[j]-'A'+1;
            }
        }
    }
    /*for (i=1;i<=q;i++)
    {
        g<<v[i]<<" ";
    }
    g<<'\n';*/
    for (i=1;i<=n;i++)
    {
        f>>ch;
        nr=ch-'A'+1;
        val1[nr]=1-val1[nr];
        poz=1;
        g<<eval();
    }
    return 0;
}