Cod sursa(job #1515566)

Utilizator din99danyMatei Daniel din99dany Data 1 noiembrie 2015 20:43:59
Problema Bool Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.97 kb
#include <cstdio>
#include <cstring>
using namespace std;

char q[1100];

int v[1000];
int indi;

void sparg( char s[], char c ){

    char *p;

    p = strstr(q,s);

    while( p != NULL ){
        *p = c;
        strcpy(p+1,p+strlen(s));
        p = strstr(p,s);
    }

}

int f1( );
int f2( );
int f3( );
int f4();

int main()
{

    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);

    int n, i, j, s, t, d, k;
    char lit;

    fgets(q,1050,stdin);

    sparg("OR",'|');
    sparg("AND",'&');
    sparg("NOT",'!');
    sparg("TRUE",'1');
    sparg("FALSE",'0');

    q[strlen(q)-1] = '\0';

    for( i = 0; i < strlen(q); ++i ){
        if( q[i] == ' ' ) strcpy(q+i,q+i+1);
    }

    /*
    for( i = 0; i < strlen(q); ++i )
        printf("%c",q[i]);
    */
    //printf("\n");
    //printf("%s",q);


    scanf("%d%*c",&n);
    for( i = 1; i <= n; ++i ){

        scanf("%c",&lit);
        v[lit] = !v[lit];


        indi = 0;
        //f1();
        printf("%d",f1());
        //printf("<%d>",indi);
    }
    printf("\n");

    return 0;
}

int f1(){

    int r = f2();

    while( q[indi] == '|'){
        indi++;
        int r2 = f2();
        r = r||r2;
    }

    return r;

}


int f2(){

    int r = f3();

    while( q[indi] == '&' ){
        indi++;

        //printf("%c",q[indi+1]);
        int r2 = f3();
        r = r&&r2;
    }

    return r;


}


int f3(){


    if( q[indi] == '!' ){
        indi++;
        int r = f4();
        return (!r);
    }
    else{
        int r = f4();
        return r;
    }


}

int f4(){

    int r;

    if( q[indi] == '(' ){
        indi++;
        r = f1();
        indi++;
    }
    else if( q[indi] >= '0' && q[indi] <= '9' ){
        r = q[indi] - '0';
        indi++;
    }
    else if ( q[indi] >= 'A' && q[indi] <= 'Z' ){
        r = v[q[indi]];
        indi++;
    }


    return r;

}