Cod sursa(job #2840841)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 28 ianuarie 2022 20:32:15
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <iostream>
#include <algorithm>
#include <fstream>

using namespace std;

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

const int L=1e3;
const int N=1e2;
const int NL=26;

char s[L+1], schimb[N+1];
int pas;
bool value[NL];

bool calc();
bool element();
bool nr();

bool calc()
{
    bool sau=element();
    while(s[pas]=='|')
    {
        pas++;
        bool t=element();
        sau=(sau || t);
    }
    return sau;
}

bool element()
{
    bool shi=nr();
    while(s[pas]=='&')
    {
        pas++;
        bool f=nr();
        shi=(shi && f);
    }
    return shi;
}

bool nr()
{
    bool kon,sign=true;
    while(s[pas]=='!')
    {
        pas++;
        sign=(!sign);
    }
    if(s[pas]=='(')
    {
        pas++;
        kon=calc();
        pas++;
        if(!sign)
            kon = (!kon);
        return kon;
    }
    if(s[pas] == '0')
    {
        kon=false;
    }
    else if(s[pas]=='1')
        kon=true;
    else
        kon=value[s[pas]-'A'];
    pas++;
    if(!sign)
        kon = (!kon);
    return kon;
}

void change()
{
    int i=0,m=0;
    while(s[i]!='\0')
    {
        if(s[i]=='T' && s[i+1]=='R')
        {
            s[m++]='1';
            i=i+4;
        }
        else if(s[i]=='F' && s[i+1]=='A')
        {
            s[m++]='0';
            i=i+5;
        }
        else if(s[i]=='N' && s[i+1]=='O')
        {
            s[m++]='!';
            i=i+3;
        }
        else if(s[i]=='A' && s[i+1]=='N')
        {
            s[m++]='&';
            i=i+3;
        }
        else if(s[i]=='O' && s[i+1]=='R')
        {
            s[m++]='|';
            i=i+2;
        }
        else if(s[i]!=' ')
            s[m++]=s[i++];
        else
            i++;
    }
    s[m]='\0';
}

int main()
{
    int n,i;
    fin.getline(s, L+1);
    fin>>n;
    fin>>schimb;
    change();
    for(i=0;i<n;i++)
    {
        value[schimb[i]-'A']=(!value[schimb[i]-'A']);
        pas=0;
        fout<<calc();
    }
    return 0;
}