Cod sursa(job #2573310)

Utilizator rebecca0312Andrei Rebecca rebecca0312 Data 5 martie 2020 17:00:48
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.93 kb
#include<bits/stdc++.h>
using namespace std;

const int NMAX=1005;

char s[NMAX];
bool val[305];
int ind;

void preComp(){
    int n=strlen(s),j=0;
    for(int i=0;i<n;i++){
        if(s[i]=='A' && s[i+1]=='N' && s[i+2]=='D'){
            s[j++]='&';
            i+=2;
            continue;
        }
        if(s[i]=='O' && s[i+1]=='R'){
            s[j++]='|';
            i++;
            continue;
        }
        if(s[i]=='N' && s[i+1]=='O' && s[i+2]=='T'){
            s[j++]='!';
            i+=2;
            continue;
        }
        if(s[i]=='T' && s[i+1]=='R' && s[i+2]=='U' && s[i+3]=='E'){
            s[j++]='1';
            i+=3;
            continue;
        }
        if(s[i]=='F' && s[i+1]=='A' && s[i+2]=='L' && s[i+3]=='S' && s[i+4]=='E'){
            s[j++]='0';
            i+=4;
            continue;
        }
        if(s[i]==' ')
            continue;
        s[j++]=s[i];
    }
    s[j]=s[j+1]='\0';
}

int sau();
int si();
int dif();

int sau(){
    int ans=si();
    while(s[ind]=='|'){
        ind++;
        ans|=si();
    }
    return ans;
}

int si(){
    int ans=dif();
    while(s[ind]=='&'){
        ind++;
        ans&=dif();
    }
    return ans;
}

int dif(){
    if(s[ind]=='1'){
        ind++;
        return 1;
    }
    if(s[ind]=='0'){
        ind++;
        return 0;
    }
    if(s[ind]=='!'){
        ind++;
        return !dif();
    }
    if(s[ind]=='('){
        ind++;
        int aux=sau();
        ind++;
        return aux;
    }
    int aux=val[s[ind]];
    ind++;
    return aux;
}

int main(){
    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);
    int m;
    cin.getline(s, NMAX);
    preComp();
    scanf("%d ", &m);
    for(int i=1;i<=m;i++){
        char mod;
        scanf("%c", &mod);
        val[mod]=1-val[mod];
        ind=0;
        printf("%d", sau());
    }
    return 0;
}