Cod sursa(job #1008090)

Utilizator andreiiiiPopa Andrei andreiiii Data 10 octombrie 2013 10:42:54
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>
using namespace std;

char a[1005], cg[104], *p;
int val[30];

int termen();
int factor();

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

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

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

int main()
{
	freopen("bool.in", "r", stdin);
	freopen("bool.out", "w", stdout);
	int n, i;
	fgets(a, 1005, stdin);
	scanf("%d\n", &n);
	fgets(cg+1, 105, stdin);
	for(i=1;i<=n;i++)
	{
		val[cg[i]-'A']=1-val[cg[i]-'A'];
		p=a;
		printf("%d", eval());
	}
}