Cod sursa(job #1515326)

Utilizator dyanagGrigore Diana dyanag Data 1 noiembrie 2015 14:52:56
Problema Bool Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <cstdio>
using namespace std;

FILE *f=fopen("bool.in", "r");
FILE *g=fopen("bool.out", "w");

char s[1001];
int v[31], poz;

int f4();
int f3();
int f2();
int f1(){
    int r=f2(), p;
    if(s[poz]==' ') ++poz;
    while(s[poz]=='O'&&s[poz+1]=='R'){
        poz+=3;
        p=f2();
        if(s[poz]==' ') ++poz;
        if(r+p!=0) r=1;
        else r=0;
    }
    return r;
}

int f2(){
    int r=f3(), p;
    if(s[poz]==' ') ++poz;
    while(s[poz]=='A'&&s[poz+1]=='N'&&s[poz+2]=='D'){
        poz+=4;
        p=f3();
        if(s[poz]==' ') ++poz;
        if(r+p==2) r=1;
        else r=0;
    }
    return r;
}

int f3(){
    int r;
    if(s[poz]=='N'&&s[poz+1]=='O'&&s[poz+2]=='T'){
        poz+=3;
        r=(f4()+1)%2;
        if(s[poz]==' ') ++poz;
        return r;
    }
    r=f4();
    if(s[poz]==' ') ++poz;
    return r;
}
int f4(){
    int val=0;
    if(s[poz]=='('){
        ++poz;
        val=f1();
        ++poz;
        return val;
    }
    if('A'<=s[poz]&&s[poz]<='Z'){
        ++poz;
        return (v[s[poz-1]-'A'+1]);
    }

}

int main()
{
    char c;
    int n;
    fgets(s, 1001, f);
    fscanf(f, "%d%*c", &n);
    for(int i=1; i<=n; ++i){
        fscanf(f, "%c", &c);
        v[c-'A'+1]=(v[c-'A'+1]+1)%2;
        fprintf(g, "%d", f1());
        poz=0;
    }
return 0;
}