Cod sursa(job #2643390)

Utilizator adiaioanaAdia R. adiaioana Data 19 august 2020 18:04:13
Problema Bool Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("bool.in");
ofstream cout("bool.out");

char str[10010], ch,  *p;
int len, val[110];

bool result();
bool nmb();
bool term();
void skipspace();

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin.getline(str,1001);
    len=strlen(str);
    int N;
    cin>>N;
    while(N--)
    {
        cin>>ch;
        val[ch-'A']=!val[ch-'A'];
        p=str;
        cout<<result();
    }
    cout<<'\n';
    return 0;
}

void skipspace()
{
    while(*p==' ')
        ++p;
}

bool nmb()
{
    bool r=0;
    skipspace();
    if(*p=='N' && *(p+1)=='O' && *(p+2)=='T')
    {
        p+=3;
        skipspace();
        r=!term();
    }
    else if(*p=='T' && *(p+1)=='R' && *(p+2)=='U' && *(p+3)=='E')
    {
        p+=4;
        r=1;
    }
    else if(*p=='F' && *(p+1)=='A' && *(p+2)=='L' && *(p+3)=='S' && *(p+4)=='E')
    {
        p+=5;
        r=0;
    }
    else{
        r=val[*p-'A'];
        p++;
    }
    return r;
}

bool term()
{
    bool r=0;
    skipspace();
    if(*p=='(')
    {
        ++p;
        skipspace();
        r=result();
        ++p;
    }
    else
        r=nmb();
    return r;
}

bool element()
{
    bool r=term();
    skipspace();
    if(*p=='A' && *(p+1)=='N' && *(p+2)=='D')
    {
        p+=3;
        skipspace();
        r&=element();
    }
    return r;
}

bool result()
{
    bool r=element();
    skipspace();
    if(*p=='O' && *(p+1)=='R')
    {
        p+=2;
        skipspace();
        r|=element();
    }
    return r;
}