Cod sursa(job #447544)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 28 aprilie 2010 23:07:46
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#include <cstring>
#define lmax 1010

char s[lmax], *p;
int n, v[30], l;

int termen();
int factor();

int eval()
{
	int r=termen();
	while (*p=='O' && *(p+1)=='R')
	{
		p+=2;
		r|=termen();
	}
	return r;
}

int termen()
{
	int r=factor();
	while (*p=='A' && *(p+1)=='N')
	{
		p+=3;
		r&=factor();
	}
	return r;
}

int factor()
{
	int r;
	if (*p=='(')
	{
		p++;
		r=eval();
		p++;
	} else
	if (*p=='T' && *(p+1)=='R')
	{
		p+=4;
		r=1;
	} else
	if (*p=='F' && *(p+1)=='A')
	{
		p+=5;
		r=0;
	} else
	if (*p=='N' && *(p+1)=='O')
	{
		p+=3;
		r=!factor();
	} else
	{
		r=v[*p-'A'];
		p++;
	}
	return r;
}
	

int main()
{
	freopen("bool.in","r",stdin);
	freopen("bool.out","w",stdout);
	fgets(s,lmax,stdin);
	l=strlen(s);
	int i, k=0, j;
	for (i=0; i<l; i++) 
		if (s[i]!=' ') s[k++]=s[i];
	s[k]='\0';
	scanf("%d\n",&n);
	char x[210];
	fgets(x,n+5,stdin);
	for (i=0; i<n; i++)
	{
		v[x[i]-'A']=!v[x[i]-'A'];
		p=s;
		printf("%d",eval());
	}
}