Cod sursa(job #1187947)

Utilizator EpictetStamatin Cristian Epictet Data 18 mai 2014 16:05:22
Problema Bool Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#define Nmax 1009
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int n, p;
char V[Nmax], c, Alf['Z' - 'A' + 9];

inline bool Termen();

inline bool Eval()
{
	int sol = Termen();
	while((V[p] == 'O' && V[p+1] == 'R') || (V[p] == 'A' && V[p+1] == 'N' && V[p+2] == 'D'))
	{
		if(V[p] == 'O') { p += 3; return (sol || Termen()); }
		if(V[p] == 'A') { p += 4; return (sol && Termen()); }
	}
	return sol;
}

inline bool Termen()
{
	int sol = 0;
	if(V[p] == '(')  { p += 1; sol = Eval(); p += 1; }
	else if(V[p] == 'T' && V[p+1] == 'R') { p += 5; sol = 1; }
	else if(V[p] == 'F' && V[p+1] == 'A') { p += 6; sol = 0; }
	else if(V[p] == 'N' && V[p+1] == 'O') { p += 4; sol = 1 - Termen(); }
	else { p += 2; sol = Alf[V[p-2] - 'A' + 1]; }
	return sol;
}

int main()
{
	fin.getline(V + 1, Nmax);
	fin >> n;
	fin.get(c);
	for(int i=1; i<=n; i++)
	{
		fin.get(c);
		Alf[c - 'A' + 1] = 1 - Alf[c - 'A' + 1];
		p = 1;
		fout << Eval();
	}
	fout << '\n';
	fout.close();
	return 0;
}