Cod sursa(job #1724343)

Utilizator valentin50517Vozian Valentin valentin50517 Data 2 iulie 2016 21:35:45
Problema Bool Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<bits/stdc++.h>
using namespace std;
string S;
int V[300],N,i,T;
char c;
bool eval(int val);
bool exp(){
	//cout << "ex " << i << '\n';
	bool rs;
	if(S[i] == '('){ ++i; return eval(exp());} 
	if(i+1 < N && S[i+1]!=' '){
		if(S[i] == 'T')i+=4, rs = 1;else
		if(S[i] == 'F')i+=5, rs = 0;else i+=4,rs = !exp();
	}else i++,rs = V[S[i]];
	return rs;
}

bool eval(int val){
	//cout << "ev " << i << " " << val << '\n';
	if(i>=N) return val;
	while(S[i] == ' ')++i;
	if(S[i] == ')'){i++;return val;}
 
	if(i+1 < N){
		if(S[i] == 'A'){i+=4; return eval(val&exp());}
		if(S[i] == 'O'){i+=3; return val | eval(exp());}
	}
	return val;
}

int main(){
	ifstream cin("bool.in");
	ofstream cout("bool.out");
	getline(cin,S);
	//cout << S << '\n';
	N = S.length();
	cin >> T;
	while(T--){
		cin >> c;
		V[c] = !V[c];
		i = 0;
		cout << eval(exp());
	}
	
	return 0;
}