Cod sursa(job #774550)

Utilizator NicuCJNicu B. NicuCJ Data 5 august 2012 18:28:28
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.38 kb
#include <fstream>
#include <stack>
using namespace std;
bool lolo[1001];
char sir[10001];
int i, n;
int k, vectoras[1001];
stack <int> stiva;
int main()
{
	ifstream f("bool.in");
	ofstream g("bool.out");
	f.getline(sir, 1500);
	//transformam expresia in ubermegapolish
	int p=strlen(sir);
	for(i=0; i<p; i++)
	{
		if(isalpha(sir[i]) && !isalpha(sir[i-1]) && !isalpha(sir[i+1]))
		{
			k++;
			vectoras[k]=sir[i];
		}
		else if(sir[i]=='T' && sir[i+1]=='R')
		{
			k++;
			vectoras[k]=1;
		}
		else if(sir[i]=='F' && sir[i+1]=='A')
		{
			k++;
			vectoras[k]=0;
		}
		else if(sir[i]=='N' && sir[i+1]=='O')
		{
			stiva.push(1001);
		}
		else if(sir[i]=='A' && sir[i+1]=='N')
		{
			if(!stiva.empty() && (stiva.top()==1001 || stiva.top()==1002))
			{
				k++;
				vectoras[k]=stiva.top();
				stiva.pop();
				stiva.push(1002);
			}
			else
				stiva.push(1002);
		}
		else if(sir[i]=='O' && sir[i+1]=='R')
		{
			if(!stiva.empty() && (stiva.top()==1001 || stiva.top()==1002 || stiva.top()==1003))
			{
				k++;
				vectoras[k]=stiva.top();
				stiva.pop();
				stiva.push(1003);
			}
			else
				stiva.push(1003);
		}
		else if(sir[i]=='(')
		{
			stiva.push(1004);
		}
		else if(sir[i]==')')
		{
			while(!stiva.empty() && stiva.top()!=1004)
			{
				k++;
				vectoras[k]=stiva.top();
				stiva.pop();
			}
			stiva.pop();
		}
	}
	while(!stiva.empty())
	{
		k++;
		vectoras[k]=stiva.top();
		stiva.pop();
	}
	f>>n;
	char x;
	for(int j=1; j<=n; j++)
	{
		f>>x;
		lolo[x]=!lolo[x];
		for(i=1; i<=k; i++)
		{
			if(vectoras[i]<=1000)
			{
				stiva.push(lolo[vectoras[i]]);
			}
			else
			{
				if(vectoras[i]==1001)
				{
					if(!stiva.empty())
					{
						int k=stiva.top();
						if(k==1)
							k=0;
						else
							k=1;
						stiva.pop();
						stiva.push(k);
					}
				}
				if(vectoras[i]==1002)
				{
					if(!stiva.empty())
					{
						int k=stiva.top();
						stiva.pop();
						int z=stiva.top();
						stiva.pop();
						if(k && z)
							stiva.push(1);
						else
							stiva.push(0);
					}
				}
				if(vectoras[i]==1003)
				{
					if(!stiva.empty())
					{
						int k=stiva.top();
						stiva.pop();
						int z=stiva.top();
						stiva.pop();
						if(k || z)
							stiva.push(1);
						else
							stiva.push(0);
					}
				}
			}
		}
		g<<stiva.top();
		stiva.pop();
	}
}