Cod sursa(job #908016)

Utilizator Kira96Denis Mita Kira96 Data 8 martie 2013 17:25:25
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include<fstream>
#define DIM 1010
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int t,i,n,v[DIM];
char s[DIM],S[DIM],*p,c;
int exp(); int orr(); int an(); int no(); void cod();

int main ()
{
	f.get(s,1001);
	t=-1;
	cod();
	v['1']=1;
	f>>n;
	for(i=1;i<=n;++i)
	{
		p=S;
		f>>c;
		v[c]=!v[c];
		g<<exp();
	}
}
int exp()
{
	int r=orr();
	while(*p=='|')
	{
		++p;
		r=r|orr();
		
	}
	return r;
}
int orr()
{
	int r=an();
	while(*p=='&')
	{
		++p;
		r=r&an();
		
	}
	return r;
}
int an()
{
	int r=no();
	while(*p=='^')
	{
		++p;
		r=r^no();
	}
	return r;
}
int no()
{
	int r=0;
	if(*p=='(')
	{
		++p;
		r=exp();
	}
	else
	if(*p=='1'||*p=='0'||(*p<='Z'&&*p>='A'))
	{
		r=v[*p];
	}
	++p;
	return r;
}




void cod()
{
	for(i=0;s[i];++i)
	{
		if(s[i]==' ')
			continue;
		if(s[i]=='(')
			S[++t]=s[i];
		else
			if((s[i]<='Z'&&s[i]>='A')&&(s[i+1]>'Z'||s[i+1]<'A'))
				S[++t]=s[i];
			else
			if(s[i]==')')
				S[++t]=s[i];
			else
				if(s[i]=='T'&&s[i+1]=='R'&&s[i+2]=='U'&&s[i+3]=='E')
				{
					S[++t]='1';
					i+=3;
				}
				else
				if(s[i]=='F'&&s[i+1]=='A'&&s[i+2]=='L'&&s[i+3]=='S'&&s[i+4]=='E')
				{
					S[++t]='0';
					i+=4;
				}
				else
				if(s[i]=='N'&&s[i+1]=='O'&&s[i+2]=='T')
				{
					S[++t]='1';
					S[++t]='^';
					i+=2;
				}
				else
				if(s[i]=='O'&&s[i+1]=='R')
				{
					S[++t]='|';
					i++;
				}
				else
				if(s[i]=='A'&&s[i+1]=='N'&&s[i+2]=='D')
				{
					S[++t]='&';
					i+=2;
				}
	}
}