Cod sursa(job #723206)

Utilizator psycho21rAbabab psycho21r Data 25 martie 2012 01:25:52
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
#include <vector>
#include <string>

using namespace std;
int i;
string expression;
vector <bool> var(30);
bool factor();
bool term();
bool eval()
{
	bool r = term();
	while(expression[i] == 'O' && expression[i + 1] == 'R')
	{
		i += 3;
		bool k = term();
		r = r || k;
	}
	return r;
}

bool term()
{
	bool r = factor();
	while(expression[i] == 'A' && expression[i + 1] == 'N')
	{
		i += 4;
		bool k = factor();
		r = r && k;
	}
	return r;
}

bool factor()
{
	bool r;
	if(expression[i] == '(')
	{
		++i;
		r = eval();
		++i;
	}
	else
	if(expression[i] == 'T' && expression[i + 1] == 'R')
	{
		r = true;
		i += 5;
	}
	else
	if(expression[i] == 'F' && expression[i + 1] == 'A')
	{
		r = false;
		i += 6;
	}
	else
	if(expression[i] == 'N' && expression[i + 1] == 'O')
	{
		i += 4;
		r = !factor();
	}
	else
	{
		r = var[expression[i] - 65];
		i += 2;
	}
	return r;
}

int main()
{
	ifstream in("bool.in");
	getline(in, expression);
	string change;
	int N;
	in >> N;
	in >> change;
	in.close();
	ofstream out("bool.out");
	for(int j = 0; j < N; ++j)
	{
		var[change[j] - 65] = !var[change[j] - 65];
		i = 0;
		out << eval();
	}
	out.close();
	return 0;
}