Cod sursa(job #983950)

Utilizator enedumitruene dumitru enedumitru Data 13 august 2013 00:22:59
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<fstream>
#define NMAX 5000
using namespace std;
ifstream f("bool.in"); ofstream g("bool.out");
int n;
bool b['Z'-'A'+1];
char s[NMAX],*p,c;
bool eval();
bool termen();
bool factor();
int main()
{   f.getline(s,NMAX);
    f>>n;
    for(int i=1;i<=n;++i)
		f>>c, b[c-'A']=!b[c-'A'], p=s, g<<eval();
    g.close(); return 0;
}
bool eval()
{   bool r=factor();
    while(*p == 'O' && *(p + 1) == 'R') p+=3, r=r|factor();
    return r;
}
bool factor()
{   bool r = termen();
    while(*p == 'A' && *(p + 1) == 'N') p+=4, r=r&termen();
    return r;
}
bool termen()
{   bool r=0;
    if(*p=='(') ++p, r = eval(), ++p;
		else if(*p=='T'&&*(p+1)=='R') p += 5, r = 1;
				else if(*p=='F'&&*(p+1)=='A') p+=6, r=0;
					   else if(*p=='N'&&*(p+1)=='O') p+=4, r=!termen();
								else r=b[*p-'A'], p+=2;
    return r;
}