Cod sursa(job #718053)

Utilizator Anonymous1010Chilivercu Cristian Anonymous1010 Data 20 martie 2012 14:28:55
Problema Bool Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<stdio.h>

int i,b[30],n;
char a[1005],cc;

int eval();
int or0();
int and0();
int not0();

int main()
{
	freopen("bool.in","r",stdin);
	freopen("bool.out","w",stdout);
	
	gets(a);
	scanf("%d\n",&n);
	
	for(;n;n--)
	{
		i=0;
		
		scanf("%c",&cc);
		
		b[cc-'A']=(b[cc-'A']+1)%2;
		
		printf("%d",eval());
	}
	
	return 0;
}

int eval()
{
	int r;
	r=or0();
	return r;
}
int or0()
{
	int r,r1;
	r=and0();
	
	if(a[i]==' ')
		i++;
	
	if(a[i]=='O'&&a[i+1]=='R')
	{
		i=i+2;
		r1=and0();
		return r|r1;
	}
	else
		return r;
}
int and0()
{
	int r,r1;
	
	r=not0();
	
	if(a[i]==' ')
		i++;
	
	if(a[i]=='A'&&a[i+1]=='N')
	{
		i=i+3;
		r1=not0();
		return r&r1;
	}
	else
		return r;
	
}
int not0()
{
	int r;
	
	if(a[i]==' ') 
		i++;
	
	if(a[i]=='(')
	{
		i++;
		r=eval();
		
		if(a[i]==' ')
			i++;
		i++;
	}
	else
	{
		if((a[i]=='F'&&a[i+1]=='A')||(a[i]=='T'&&a[i+1]=='R'))
		{
			if(a[i]=='F'&&a[i+1]=='A')
			{
				i=i+5;
				r=0;
			}
			else
			{
				i=i+4;
				r=1;
			}
		}
		else
		{
			if(a[i]=='N'&&a[i+1]=='O')
			{
				i=i+3;
				r=((not0()+1)%2);
			}
			else
			{
				i++;
				r=b[a[i-1]-'A'];
			}
		}
	}
	
	return r;
}