Cod sursa(job #592219)

Utilizator rudarelLup Ionut rudarel Data 27 mai 2011 08:37:06
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define LMAX 1010
 
int N, i;
bool Lit[27];
char S[LMAX], c, *p;
 
inline int eval();
inline int termen();
inline int expr();
 
inline int expr()
{
    int rez;
 
    if( *p == 'N' && *(p+1) == 'O' )
    {
        p += 3;
        rez = expr();
        return !rez;
    }
    else if( *p == '(' )
    {
        ++p;
        rez = eval();
        ++p;
 
        return rez;
    }
    else if( *p == 'T' && *(p+1) == 'R' )
    {
        p += 4;
        return 1;
    }
    else if( *p == 'F' && *(p+1) == 'A' )
    {
        p += 5;
        return 0;
    }
    else
    {
        rez = Lit[ *p - 'A' ];
        ++p;
        return rez;
    }
}
 
inline int termen()
{
    int rez = expr();
 
    for( ; *p == 'A' && *(p+1) == 'N'; p += 3, rez &= expr() );
 
    return rez;
}
 
inline int eval()
{
    int rez = termen();
 
    for( ; *p == 'O' && *(p+1) == 'R'; p += 2, rez |= termen() );
 
    return rez;
}
 
int main()
{
    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);
 
    gets(S);
    p = strchr ( S, ' ' );
    while( p )
    {
        strcpy( p, p+1 );
        p = strchr( p, ' ' );
    }
 
    scanf("%d\n", &N);
    for( i=0; i<N; i++ )
    {
        scanf("%c", &c);
        Lit[ (int)( c-'A') ] = !Lit[ (int)( c-'A') ];
 
        p = S;
        printf("%d", eval() );
    }
    printf("\n");
 
    return 0;
}