Cod sursa(job #1952875)

Utilizator Liviu_Ionut_MoantaMoanta Ionut Liviu Liviu_Ionut_Moanta Data 4 aprilie 2017 14:11:57
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.84 kb
#include<fstream>
#include<cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int i,j,n,m,k;
int v[103];
char x;
char s[1003],t[1003];
int OR();
int AND();
int XOR();
int FIN();
int OR(){
    int r=AND();
    while(t[i]=='|'){
        i++;
        r=(r | AND());
    }
    return r;
}
int AND(){
    int r=XOR();
    while(t[i]=='&') {
        i++;
        r=(r & XOR());
    }
    return r;
}
int XOR(){
    int r=FIN();
    while(t[i] == '!') {
        i++;
        r=(r^FIN());
    }
    return r;
}
int FIN(){
    int r;
    if (t[i]=='(') {
        i++;
        r=OR();
        i++;
    }
    else{
        if(t[i]=='1'){
            i++;
            return 1;
        }
        if(t[i]=='0'){
            i++;
            return 0;
        }
        return v[t[i++]];
    }
    return r;
}
int main(){
    fin.get(s,1003);
    k=strlen(s);
    for(i=0;i<k;i++){
        if(s[i]==' '){
            continue;
        }
        if(s[i]=='O' && s[i+1]=='R'){
            t[n++]='|';
            i++;
            continue;
        }
        if(s[i]=='A' && s[i+1]=='N'){
            t[n++]='&';
            i+=2;
            continue;
        }
        if(s[i]=='N' && s[i+1]=='O'){
            t[n++]='1';
            t[n++]='!';
            i+=2;
            continue;
        }
        if(s[i]=='T' && s[i+1]=='R'){
            t[n++]='1';
            i+=3;
            continue;
        }
        if(s[i]=='F' && s[i+1]=='A'){
            t[n++]='0';
            i+=4;
            continue;
        }
        if(s[i]=='(' || s[i]==')'){
            t[n++]=s[i];
            continue;
        }
        t[n++]=s[i];
    }
    fin>>m;
    for(j=1;j<=m;j++){
        fin>>x;
        v[x]=1-v[x];
        i=0;
        fout<<OR();
    }
    return 0;
}