Cod sursa(job #351525)

Utilizator ilincaSorescu Ilinca ilinca Data 28 septembrie 2009 13:18:23
Problema Bool Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <stdio.h>

#define pmax 1005
#define nmax 105

int n;
bool v [55];
char a [nmax], *p;


inline bool conditie ()
{
	if (*p  == 'A' && *(p+1) == 'N')
		return true;
	if (*p == 'O' && *(p+1) == 'R')
		return true;
	return false;
}

inline bool negare ()
{
	if (*p != 'N')
		return false;
	if (*(p+1) != 'O')
		return false;
	p += 4;
	return true;
}

bool eval ();

bool termen ()
{
	bool Not=negare (), r;
	if (*p == '(')
	{
		++p;
		r=eval ();
		p += 2;
	}
	else
	{
		r=v [*p-'A'];
		p += 2;
	}
	if (Not)
		return ~r;
	return r;
}

bool eval ()
{
	bool r=termen ();
	while (conditie ())
	{	
		if ((*p == 'A') && (*(p+1) == 'N'))
		{
			p += 4;
			r &= termen ();
		}    
		else
			if ((*p == 'O') && (*(p+1) == 'R'))
			{
				p += 3;
				r |= termen ();
			}
	}
	return r;
}

int main ()
{
	freopen ("bool.in", "r", stdin);
	freopen ("bool.out", "w", stdout);
	gets (a);
	scanf ("%d ", &n);
	int i;
	char c;
	for (i=1; i <= n; ++i)
	{
		scanf ("%c", &c);
		if (v [c-'A'] == true)
			v [c-'A']=false;
		else
			v [c-'A']=true;
		p=a;
		if (eval () == true)
			printf ("1");
		else
			printf ("0");
	}
	printf ("\n");
	return 0;
}