Cod sursa(job #291378)

Utilizator cotofanaCotofana Cristian cotofana Data 29 martie 2009 18:45:02
Problema Bool Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 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=r&&expr();
				break;
			case 'O':
				p+=3;
				r=r||expr();
				break;
		}
	}
	return r;
}

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

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;
}