Cod sursa(job #2058876)

Utilizator LauraNaduLaura Nadu LauraNadu Data 6 noiembrie 2017 12:20:00
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.7 kb
#include<fstream>
#include<string>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int m, n, k, nr, i, trans[100], b[1001], v[100], sol;
char a[1001], c, stiva[1001];
int evaluare()
{
    trans['A']=-1;
    trans['B']=-2;
    trans[79]=-3;
    for(i=0;a[i]!=0;i++)
        m++;
    k=0;
    stiva[k]='(';
    a[++m]=')';
    for(i=0;i<m;i++)
    {
        while(a[i]==' ')
            i++;
        if(a[i]=='(')
            stiva[++k]=a[i];
        if(a[i]==')')
        {
            while(stiva[k]!='(')
                b[++nr]=trans[stiva[k--]];
            k--;
        }
        if(a[i]=='O' && a[i+1]=='R')
        {
            while(stiva[k]=='A' || stiva[k]=='N' || stiva[k]=='O')
                b[++nr]=trans[stiva[k--]];
            stiva[++k]=a[i];
            i++;
        }
        if(a[i]=='A' && a[i+1]=='N' && a[i+2]=='D')
        {
            while(stiva[k]=='A' || stiva[k]=='N' || stiva[k]=='O')
                b[++nr]=trans[stiva[k--]];
            stiva[++k]=a[i];
            i+=2;
        }
        if(a[i]=='N' && a[i+1]=='O' && a[i+2]=='T')
        {
            while(stiva[k]=='N')
                b[++nr]=trans[stiva[k--]];
            stiva[++k]=a[i];
            i+=2;
        }
        if(a[i]=='T' && a[i+1]=='R')
        {
            b[++nr]=1;
            i+=3;
        }
        else if(a[i]=='F' && a[i+1]=='A')
            {
                b[++nr]=0;
                i+=4;
            }
        if(a[i]>='A' && a[i]<='Z' && (a[i+1]<'A' || a[i+1]>'Z'))
        {
            int numar=a[i]-'A';
            b[++nr]=v[numar];
        }
    }
    k=0;
    for(i=1;i<=nr;i++)
    {
        if(b[i]>=0)
            trans[++k]=b[i];
        else
        {
            if(b[i]==-1)
            {
                if(trans[k-1]==0 || trans[k]==0)
                    sol=0;
                else sol=1;
                //sol=trans[k-1]+trans[k];
                trans[k-1]=sol;
            }
            if(b[i]==-2)
            {
                if(sol==0)
                    sol=1;
                else sol=0;
                //sol=trans[k-1]*trans[k];
                trans[k-1]=sol;
            }
            if(b[i]==-3)
            {
                if(trans[k]==1 || trans[k-1]==1)
                    sol=1;
                else sol=0;
                //sol=trans[k-1]/trans[k];
                trans[k-1]=sol;
            }
            k--;
        }
    }
    g<<sol;
    return 0;
}
int main()
{
    f.get(a,1003);
    f>>n;
    for(;n;n--)
    {
        f>>c;
        int x=c-'A';
        if(v[x]==1)
            v[x]=0;
        else v[x]=1;
        evaluare();
    }
    return 0;
}