Cod sursa(job #1831938)

Utilizator TherevengerkingSurani Adrian Therevengerking Data 19 decembrie 2016 09:26:41
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.22 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
const int Nmax=90+5;
int change;
bool o;
string t,sc,s;
bool lit[Nmax];
int i,j=0;
bool eval(bool semn);
bool isalpha(char x);
void rez();
bool termen(bool semn);
bool isalpha(char x)
{
    if(x>=64 && x<=90)return 1;
    return 0;
}
void rez()
{
    lit[sc[j]]=!lit[sc[j]];
    i=0;
    fout<<eval(0);
    if(j<change-1)
    {
        ++j;
        rez();
    }
}
bool eval(bool semn)
{
    bool r= termen(0);
    while(s[i]=='2' or s[i]=='3')
    {
        if(s[i]=='2')
        {
            i+=3;
            bool t=termen(0);
            if(r ==1 or t==1)r=1;
            else r=0;
        }
        else
        {
            i+=4;
            bool t=termen(0);
            if(r ==1 && t==1)r=1;
            else r=0;
        }
    }
    if(semn==1)r=!r;
    return r;
}
bool termen(bool semn)
{
    bool r;
    if(s[i]=='2')
    {
        i+=4;
        semn=1;
        r=termen(1);
    }
    else
    {
        if(s[i]=='(')
        {
            ++i;
            r=eval(0);
            if(semn==1)r=!r;
            i+=2;
        }
        else
        {
            if(s[i]=='1'){
            if((lit[t[i]]==0 && semn==0) or (lit[t[i]]==1 && semn==1))r=0;
            else
                r=1;
            if(s[i+1]!=')')i+=2;
            }
            else
            {
                if((i+4)<s.size() && s[i+4]=='2')
                {
                    r=0;
                    i+=6;
                }
                else
                {
                    i+=5;
                    r=1;
                }
                if(semn==1)r=!r;
            }
        }
    }
    return r;
}
int main()
{
    getline(fin,t);
    fin>>change;
    fin>>sc;
    for(int i=0;i<t.size();++i)
    {
        if(t[i]=='O' && t[i+1]=='R')
        {
            s.push_back(50);s.push_back(50);
            i+=1;
        }
        else
        {
            if(t[i]=='N' && t[i+1]=='O')
            {
                s.push_back(50);s.push_back(50);s.push_back(50);
                i+=2;
            }
            else
            {
                if(t[i]=='T' && t[i+1]=='R')
                {
                    s.push_back(50);s.push_back(50);s.push_back(50);s.push_back(50);
                    i+=3;
                }
                else
                {
                    if(t[i]=='F' && t[i+1]=='A')
                    {
                        s.push_back(50);s.push_back(50);s.push_back(50);s.push_back(50);s.push_back(50);
                        i+=4;
                    }
                    else
                    {
                            if(t[i]=='A' && t[i+1]=='N')
                            {
                                s.push_back(51);s.push_back(51);s.push_back(51);
                                i+=2;
                            }
                            else
                                if(isalpha(t[i]))s.push_back(49);
                                    else s.push_back(t[i]);
                    }
                }

            }
        }
    }
    rez();
    return 0;
}