Cod sursa(job #2271427)

Utilizator denmirceaBrasoveanu Mircea denmircea Data 28 octombrie 2018 15:58:17
Problema Bool Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.11 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
char c[100001],c1;
char var[101];
char v[100001];
bool fr[101];
int  n;
int i;
int expresie(),termen(),factor();

int expresie()
{
    int r=0;
    r=termen();
    int aux;
    while(c[i]=='&'||c[i]=='|')
    {
        if(c[i]=='&')
        {
            i++;
            aux=termen();
            r=(r & aux );
        }
        else
        {
            i++;
            aux=termen();
            r=(r | aux );
        }
    }
    return r;
}
int termen()
{
    int r=0;
    if(c[i]=='(')
    {
        i++;
        r=expresie();
        i++;
    }
    else if(c[i]>='A'&&c[i]<='[')
    {
        int r1=c[i];
        r=fr[r1];
    }
    else if(c[i]=='!')
    {
        if(c[i]+1=='(')
        {
            i+=2;
            r=1-expresie();
            i++;
        }
        else
        {
            i++;
            r=1-termen();
        }

    }
    return r;
}


int main()
{
fr['[']=1;
    int k=-1;
    while( fin>>v)
    {
        if(v[0]>='0'&&v[0]<='9')
            break;
        for(int i=0; i<strlen(v); i++)
        {
            if(v[i]==' ')
                continue;
                else if(v[i]=='T'&&v[i+1]=='R'){
                    c[++k]='[';
                    i+=3;
                }
                else if(v[i]=='F'&&v[i+1]=='A')
                {
                    c[++k]=']';
                    i+=4;
                }

            else if(v[i]=='A'&&v[i+1]=='N'){
                c[++k]='&';
                i+=2;
            }
            else if(v[i]=='O'&&v[i+1]=='R'){
                c[++k]='|';
            i++;
            }
            else if(v[i]=='N'&&v[i+1]=='O'){
                c[++k]='!';
            i+=2;
            }
            else
                c[++k]=v[i];
        }
    }

    fin>>var;
    for(int i1=0; i1<strlen(var); i1++)
    {
        int    numar=var[i1]-0;
        fr[numar]=1-fr[numar];
        i=0;
       fout<<expresie();
    }
}