Cod sursa(job #2532711)

Utilizator BogauuuBogdan Ivancu Bogauuu Data 28 ianuarie 2020 09:55:41
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.51 kb
#include <fstream>
#include <cstring>

using namespace std;

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

int expresie();
int termen();
int factor();
int factor1();

char l,s[1005],c[1005];
bool v[400];
int i,n,k,j;

int main()
{
    fin.getline(s,1005);
    n=strlen(s);
    k=0;
    for (i=0;i<n;i++)
    {
        if (s[i]=='A' && s[i+1]=='N')
        {
            c[k]='&';
            i+=2;
            k++;
        }
        else
        {
            if (s[i]=='N' && s[i+1]=='O')
            {
                c[k]='1';
                k++;
                c[k]='^';
                i+=2;
                k++;
            }
            else
            {
                if (s[i]=='O' && s[i+1]=='R')
                {
                    c[k]='|';
                    i++;
                    k++;
                }
                else
                {
                    if (s[i]=='T' && s[i+1]=='R')
                    {
                        c[k]='1';
                        i+=3;
                        k++;
                    }
                    else
                    {
                        if (s[i]=='F' && s[i+1]=='A')
                        {
                            c[k]='0';
                            i+=4;
                            k++;
                        }
                        else if (s[i]!=' ') c[k++]=s[i];
                    }
                }
            }
        }
    }
    fin >> n;
    for (j=1;j<=n;j++)
    {
        fin >> l;
        if (v[l]==0) v[l]=1;
        else v[l]=0;
        i=0;
        fout << expresie();
    }

    return 0;
}

int expresie()
{
    int r=termen();
    while (c[i]=='|')
    {
        i++;
        int q=termen();
        r=(r|q);
    }
    return r;
}

int termen()
{
    int r=factor();
    while (c[i]=='&')
    {
        i++;
        int q=factor();
        r=(r&q);
    }
    return r;
}

int factor()
{
    int r=factor1();
    {
        while (c[i]=='^')
        {
            i++;
            int q=factor1();
            r=(r^q);
        }
    }
    return r;
}

int factor1()
{
    int r;
    if (c[i]>='A' && c[i]<='Z')
    {
        r=v[c[i]];
        i++;
    }
    else
    {
        if (c[i]=='0' || c[i]=='1')
        {
            r=c[i]-'0';
            i++;
        }
        else if (c[i]=='(')
        {
            i++;
            r=expresie();
            i++;
        }
    }
    return r;
}