Cod sursa(job #1027786)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 13 noiembrie 2013 01:49:51
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<cstdio>
char s[1001],c;
int v[40],i,n,u,j;
FILE *f,*g;
int op2();int op3();
int op1(){
    int r=op2();
    while(s[i]=='O'&&s[i+1]=='R'){
        i+=2;
        r|=op2();
    }
    return r;
}
int op2(){
    int r=op3();
    while(s[i]=='A'&&s[i+1]=='N'){
        i+=3;
        r&=op3();
    }
    return r;
}
int op3(){
    if(s[i]=='('){
        ++i;
        int r=op1();
        ++i;
        return r;
    }
    if (s[i]=='N'&&s[i+1]=='O'&&s[i+2]=='T'){
        i+=3;
        return !op3();
    }
    if (s[i]=='T' && s[i+1]=='R'){
        i+=4;
        return 1;
    }
    if (s[i]=='F' && s[i+1]=='A'&&s[i+2]=='L'){
        i+=5;
        return 0;
    }
    i++;
    return v[s[i-1]-'A'];
}
int main(){
    f=fopen("bool.in","r");
    g=fopen("bool.out","w");
    while (1){
        fscanf(f,"%c",&c);
        if(c==' ') continue;
        if(c=='\n') break;
        s[u++]=c;
    }
    fscanf(f,"%d\n",&n);
    for (int j=1; j<=n; j++){
        fscanf(f,"%c",&c);
        v[c-'A']=v[c-'A']^1;
        i=0;
        fprintf(g,"%d",op1());
    }
    fclose(f);
    fclose(g);
    return 0;
}