Cod sursa(job #2533252)

Utilizator divianegoescuDivia Negoescu divianegoescu Data 28 ianuarie 2020 21:06:17
Problema Bool Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int i,j=-1,val[200],n;
char c[1005],s[1005],ch;
int OR(),AND(),XOR(),factor();
int main(){
    fin.getline(c,1002);
    for(i=0;c[i];i++){
        if(c[i]==' ')continue;
        else if(c[i]=='T' && c[i+1]=='R')
            s[++j]='1',i+=3;
        else if(c[i]=='F' && c[i+1]=='A')
            s[++j]='0',i+=4;
        else if(c[i]=='A' && c[i+1]=='N')
            s[++j]='&',i+=2;
        else if(c[i]=='O' && c[i+1]=='R')
            s[++j]='|',i++;
        else if(c[i]=='N' && c[i+1]=='O')
            s[++j]='1',s[++j]='^',j+=2; ///din ! unar  fac ^ binar
        else s[++j]=c[i];
    }
    fin>>n;
    for(;n--;){
        fin>>ch;
        val[ch]=1-val[ch];
        i=0;
        fout<<OR();
    }
    return 0;
}
int OR(){
    int r=AND();
    while(s[i]=='|'){
        i++;
        r=(r|AND());
    } return r;
}
int AND(){
    int r=XOR();
    while(s[i]=='&'){
        i++;
        r=(r&XOR());
    } return r;
}
int XOR(){
    int r=factor();
    while(s[i]=='^'){
        i++;
        r=(r^factor());
    } return r;
}
int factor(){
    if(s[i]=='('){
        i++;
        int r=OR();
        i++;
        return r;
    }
    else if(s[i]=='0'){
        i++;return 0;
    }
    else if(s[i]=='1'){
        i++;return 1;
    }
    return val[s[i++]];
}