Cod sursa(job #903674)

Utilizator nutipasa16Macovei Claudiu nutipasa16 Data 2 martie 2013 12:51:50
Problema Bool Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include<cstdio>
#define max_dim 10005
using namespace std;
FILE *f,*g;
char s[max_dim],*c;
int alfab[30];
int E(),T(),F();
int E()
{
	int rez=T();
	while((*c=='A' && *(c+1)=='N' && *(c+2)=='D') || (*c=='O' && *(c+1)=='R'))
	{
        if(*c=='A' && *(c+1)=='N' && *(c+2)=='D')
		{
			c+=4;
			rez=(rez & T());
		}
        else
		{
			c+=3;
			rez=(rez || T());
		}
	}
	return rez;
}
int T()
{
	int rez=F();
	while(*c=='N' && *(c+1)=='O' && *(c+2)=='T')
	{
		if(*c=='N' && *(c+1)=='O' && *(c+2)=='T')
		{
			c+=3;
			rez=F();
			rez=!rez;
		}
	}
return rez;
}
int F()
{
	int rez=0;
	if(*c=='(')
	{
		c++;
		rez=E();
		c++;
		return rez;
	}
	while(*c>='A' && *c<='Z' && (*(c+1)==' ' || *(c+1)==')' || *(c+4)==' ' || *(c+4)==')' || *(c+5)==' ' || *(c+5)==')'))
	{
		if(*c>='A' && *c<='Z' && (*(c+1)==' ' || *(c+1)==')'))
		{
			rez=alfab[*c-65];
			c+=2;
		}
		else
			if(*c=='T' && *(c+1)=='R')
			{
				rez=1;
				c+=4;
			}
			else
				if(*c=='F' && *(c+1)=='A')
				{
				rez=0;
				c+=5;
				}
				else 
					return rez;
	}
	return rez;
}
int main()
{
	int q;
	char ch;
	f=fopen("bool.in","r");
	g=fopen("bool.out","w");
	fgets(s,max_dim,f);
	fscanf(f,"%d",&q);	
	fscanf(f,"%c",&ch);
	for(int i=1;i<=q;i++)
	{
		c=s;
		fscanf(f,"%c",&ch);
		if(alfab[ch-65])
			alfab[ch-65]=0;
		else
			alfab[ch-65]=1;
		fprintf(g,"%d",E());
	}
	return 0;
}