Cod sursa(job #291402)

Utilizator cotofanaCotofana Cristian cotofana Data 29 martie 2009 19:19:12
Problema Bool Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>
#include <string.h>
#define dim 1100

char s[dim], ch, *p;
int val[27], n;

int expr();

int termen()
{
	int r=expr();
	while ((*p=='A' && *(p+1)=='N' && *(p+2)=='D') || (*p=='O' && *(p+1)=='R'))
	{
		switch (*p)
		{
			case 'A':
				p+=4;
				r&=expr();
				break;
			case 'O':
				p+=3;
				r|=expr();
				break;
		}
	}
	return r;
}

int expr()
{
	int r;
	if (*p=='(')
	{
		p++;
		r=termen();
		p++;
	}
	else if (*p=='N' && *(p+1)=='O')
	{
		p+=4;
		r=!expr();
	}
	else if (*p=='T' && *(p+1)=='R')
	{
		r=1;
		p+=5;
	}
	else if (*p=='F' && *(p+1)=='A')
	{
		r=0;
		p+=6;
	}
	else
	{
		r=val[*p-'A'];
		p+=2;
	}
	return r;
}

int main()
{
	char ch;
	freopen("bool.in", "r", stdin);
	freopen("bool.out", "w", stdout);
	fgets(s, dim, stdin);
	memset(val, 0, sizeof(val));
	scanf("%d\n", &n);
	for (; n; n--)
	{
		scanf("%c\n", &ch);
		val[ch-'A']^=1;
		p=s;
		printf("%d", termen());
	}
	return 0;
}