Cod sursa(job #2680205)

Utilizator Andrei2000Andrei Mihailescu Andrei2000 Data 2 decembrie 2020 22:31:05
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, vv[35], k=0, l;
char* ex;

void eat0(){
    while(k<l && ex[k]==' ')k++;
}

bool ev();

bool fact(){
    bool ret=0;
    eat0();
    if(ex[k]=='('){
        k++;
        ret = ev();
        k++;
        return ret;
    }
    if(k<l-1 && ex[k]=='N' && ex[k+1]=='O'){
        k+=3;
        return fact()^1;
    }
    if(k<l-1 && ex[k]=='T' && ex[k+1]=='R'){
        k+=4;
        return true;
    }
    else if(k<l-1 && ex[k]=='F' && ex[k+1]=='A'){
        k+=5;
        return false;
    }
    else{
        return vv[ex[k++]-'A'];
    }
}

bool ev2(){
    bool ret = true;
    if(!fact())ret = false;
    eat0();
    while(ex[k]=='A' && ex[k+1]=='N'){
        k+=3;
        if(!fact())ret = false;
        eat0();
    }
    return ret;
}

bool ev(){
    bool ret = false;
    if(ev2())ret = true;
    eat0();
    while(ex[k]=='O' && ex[k+1]=='R'){
        k+=2;
        if(ev2())ret = true;
        eat0();
    }
    return ret;
}

int main()
{
    ex = new char[1010];
    fin.get(ex,1010);
    fin>>n;
    l=strlen(ex);
    for(int i=1;i<=n;i++){
        char c;
        fin>>c;
        vv[c-'A']=1-vv[c-'A'];
        k=0;
        fout<<ev();
    }
    fout<<"\n";
    return 0;
}