Cod sursa(job #471348)

Utilizator blasterzMircea Dima blasterz Data 18 iulie 2010 13:05:51
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <cstdio>

#define N 1024

int n, s[N];
char a[N];
char *p;

int sau ();
int si ();
int f ();

int sau ()
{
	int ret = si ();

	while (*p == 'O' && *(p + 1) == 'R')
		p += 3, 
		ret |= si ();
	
	return ret;
}


int si ()
{
	int ret = f ();

	while (*p == 'A' && *(p + 1) == 'N')
		p += 4, 
		ret &= f ();

	return ret;
}

int f ()
{
	int ret = 0;

	if (*p == 'N' && *(p + 1) == 'O')
		p += 4,
		ret |= !f ();
	else if (*p == 'T' && *(p + 1) == 'R')
		p += 5,
		ret = 1;
	else if (*p == 'F' && *(p + 1) == 'A')
		p += 6,
		ret = 0;
	else if (*p == '(')
		++p,
		ret = sau (),
		++p;
	else ret = s[*p - 'A'],
	     p += 2;

	return ret;
}


int main ()
{
	freopen ("bool.in", "r", stdin);
	freopen ("bool.out", "w", stdout);
	
	gets (a);
	
	scanf ("%d\n", &n);
	
//	fflush (stdout);
	while (n--)
	{
		char c;
		scanf ("%c", &c);
//		printf ("_(%c)_", c);
		s[c - 'A'] = ! s[c- 'A'];
		p = a;
		printf ("%d", sau ());
	}
	
	return 0;
}