Cod sursa(job #1117092)

Utilizator bogdanpaunFMI Paun Bogdan Gabriel bogdanpaun Data 23 februarie 2014 01:08:26
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>
using namespace std;
char s[100005],*p,N,C;
bool us[50];
int a(),b(),c();
int main(){
    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);
    gets(s);  scanf( "%d\n" , &N );
    while( N-- ){
        scanf("%c",&C);
        us[C-'A']^=1; p=s;
        printf( "%d" , a() );   }
    return 0;
}
int a(){  // 'OR'
    int r=b();
    while( *(p+1) == 'O' && *(p+2) == 'R' ){ p+=4;  r|=b();    }
    return r;
}
int b(){  // 'AND'
    int r=c();
    while( *(p+1) == 'A' && *(p+2) == 'N' && *(p+3) == 'D' ){ p+=5;  r&=c();   }
    return r;
}
int c(){ // TERMEN
    int r=0;
    if( *p == 'N' && *(p+1) == 'O' ){  p+=4;return !c();            }
    if( *p == '(' )                 {  ++p;r=a();++p;return r;      }
    if( *p == 'T' && *(p+1) == 'R' ){  p+=4; return 1;              }
    if( *p == 'F' && *(p+1) == 'A' ){  p+=5; return 0;              }
    if( *p >= 'A' && *p <= 'Z' )    {  r=us[*p-'A'];++p;return r;   }
    return r;
}