Cod sursa(job #1247573)

Utilizator Master011Dragos Martac Master011 Data 22 octombrie 2014 23:35:24
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.94 kb
#include<cstdio>
using namespace std;

const int lMax = 1005, sMax = 105;
char S[lMax];
int p,cnt;
bool vals[sMax];

char expresie();
char andt();
char nott();
void init();

int main (){
    FILE *in = fopen("bool.in","r");
    FILE *out = fopen("bool.out","w");
    fgets(S,lMax - 1,in);
    init();
    int n;
    fscanf(in,"%d\n", &n);

    char x;
    for(int i = 0; i < n; ++i){
        fscanf(in,"%c", &x);
        vals[x-'A'] = !vals[x-'A'];
        p=0;
        x=expresie();
        fprintf(out,"%d",x);
    }
    return 0;
}

char nott(){
    char semn = 1, rez;

    while (S[p]==4){
        semn=-semn;
        p++;
    }

    if(S[p]=='('){
        p++;
        rez=expresie();
        p++;

    }

    if(S[p]==1 || S[p]==0){
        rez=S[p];
        p++;
    }else if(S[p]>='A' && S[p]<='Z'){
        rez=vals[S[p]-'A'];
        p++;
    }
    rez=semn==1?rez:!rez;
    return rez;
}

char andt(){
    char rez = nott();

    while(S[p]==3){
        p++;
        rez&=nott();
    }
    return rez;
}

char expresie(){
    char rez = andt();

    while(S[p]==2){
        p++;
        rez|=andt();
    }
    return rez;
}

void init (){
    int i = 0;
    while(S[i]!=0 && S[i]!='\n'){
        if(S[i]=='O' && S[i+1]=='R'){
            S[cnt++]=2;
            i+=2;
        }else if(S[i]=='A' && S[i+1]=='N' && S[i+2]=='D'){
            S[cnt++]=3;
            i+=3;
        }else if(S[i]=='N' && S[i+1]=='O' && S[i+2]=='T'){
            S[cnt++]=4;
            i+=3;
        }else if(S[i]=='T' && S[i+1]=='R' && S[i+2]=='U' && S[i+3]=='E'){
            S[cnt++]=1;
            i+=4;
        }else if(S[i]=='F' && S[i+1]=='A' && S[i+2]=='L' && S[i+3]=='S' && S[i+4]=='E'){
            S[cnt++]=0;
            i+=5;
        }
        else if(S[i]!=' '){
            S[cnt++]=S[i];
            i++;
        }else{
            i++;
        }
    }
    S[cnt]=100;
}