Cod sursa(job #1258193)

Utilizator LegionHagiu Stefan Legion Data 8 noiembrie 2014 16:23:50
Problema Bool Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.18 kb
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

bool litere[30];
string s;

bool rezolva(int c)
{
	static int i;
	int fosttermen=-1, curenttermen=0;
	int negari = 0;
	int armura = 0;
	for (i = c; i < s.length(); i++)
	{
		if (s[i] == '(')
		{
			if (armura==0&&curenttermen==0)
			{
				if (negari % 2 == 0)
				{
					curenttermen = rezolva(i + 1);
				}
				else
				{
					curenttermen = !rezolva(i + 1);
				}
				negari = 0;
			}
			else{ rezolva(i + 1); }
		}
		if (s[i] == 'T'&&s[i + 1] == 'R'){
			i += 3; 
			if (armura == 0)
			{
				if (negari % 2 == 0)
				{
					curenttermen = 1;
				}
				else
				{
					curenttermen = 0;
				}
				negari = 0;
			}
		}
		if (s[i] == 'F'&&s[i + 1] == 'A'){
			i += 4;
			if (armura == 0)
			{
				if (negari % 2 == 0)
				{
					curenttermen = 0;
				}
				else
				{
					curenttermen = 1;
				}
				negari = 0;
			}
			}
		if (s[i] == 'N'&&s[i + 1] == 'O'){ i += 2; negari++; }
		if (s[i] == 'A'&&s[i + 1] == 'N')
		{
			if (armura == 1){ curenttermen = 1; armura = 0; }
			if (fosttermen >= 0)
			{
				if (fosttermen != curenttermen){ return 0; }
			}
			if (fosttermen == -1){ fosttermen = curenttermen; }
			i += 2;
		}
		if (s[i] == 'O'&&s[i + 1] == 'R')
		{
			i += 1;
			negari = 0;
			if (curenttermen == 1){ armura = 1; }
		}
		if (s[i] >= 'A'&&s[i] <= 'Z' && (s[i + 1] == ' ' || s[i + 1] == ')'))
		{
			if (curenttermen == 0&&armura==0)
			{
				if (negari % 2 == 0)
				{
					curenttermen = litere[s[i] - 64];
				}
				else { curenttermen = !litere[s[i] - 64]; }
				negari = 0;
			}
			if (armura == 1){ curenttermen = 1; }
		}
		if (s[i] == ')'){ if (armura == 1){ curenttermen = 1; } i++; break; }
	}
	if (fosttermen == -1)
	{
		if (curenttermen == 1){ return true; }
		else { return false; }
	}
	if (fosttermen >= 0)
	{
		if (curenttermen==fosttermen){ return true; }

		else { return false; }
	}
}

int main()
{
	ifstream in("bool.in");
	ofstream out("bool.out");
	int i, n;
	char c;
	getline(in, s);
	in >> n;
	for (i = 1; i <= n; i++)
	{
		in >> c;
		litere[c - 64] = !litere[c - 64];
		out << rezolva(0);
	}
}