Cod sursa(job #818873)

Utilizator ericptsStavarache Petru Eric ericpts Data 18 noiembrie 2012 10:38:39
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <cstdio>

using namespace std;


char s[1010];
char *p;
bool val['Z'-'A'+5];
bool lowest_level();
bool eval2();
bool evaluate()
{
    bool v1,v2;
    v1 = eval2();
    while(*p == 'O' && *(p+1) == 'R')
    {
        p+= 3;
        v2 = eval2();
        v1 = v1 || v2;
    }
    return v1;
}

bool eval2()
{
    bool v1,v2;
    v1 = lowest_level();
    while(*p == 'A' && *(p+1) == 'N')
    {
        p+=4;
        v2 = lowest_level();
        v1 = v1 && v2;
    }
    return v1;
}

bool lowest_level()
{
	bool r;
	if(*p == '(')
	{
		++p;
		r = evaluate();
		++p;
	}
	else
	if(*p == 'T' && *(p+1) == 'R')
	{
		r = true;
		p += 5;
	}
	else
	if(*p == 'F' && *(p+1) == 'A')
	{
		r = false;
		p += 6;
	}
	else
	if(*p == 'N' && *(p+1) == 'O')
	{
		p += 4;
		r = !lowest_level();
	}
	else
	{
		r = val[*p - 'A'];
		p += 2;
	}
	return r;
}

int main()
{
    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);
    gets(s);
    int n,i;
    char c;
    scanf("%d\n",&n);
    for(i=1;i<=n;++i)
    {
        scanf("%c",&c);
        val[c-'A']=!val[c-'A'];
        p = s;
        printf("%d",evaluate());
    }
    return 0;
}