Cod sursa(job #743958)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 6 mai 2012 21:19:28
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
#include <string.h>
#include <stdlib.h>
#define MaxN 109
#define MaxS 1009
#define MaxC 30
using namespace std;
char S[MaxS],sch[MaxN],str[MaxN];
int N,k,var[MaxC];

int termen();
int factor();
ifstream fin("bool.in");
ofstream fout("bool.out");
int eval(){
	int r=termen();
	while (S[k]=='O' && S[k+1]=='R'){
		k+=3;
		r|=termen();
	}
	return r;
}
int termen(){
	int r=factor();
	while (S[k]=='A' && S[k+1]=='N' && S[k+2]=='D'){
		k+=4;
		r&=factor();
	}
	return r;
}
int factor(){
	int r;
	if (S[k]=='('){
		k++;
		r=eval();
		k++;
	}
	else 
		if (S[k]=='N' && S[k+1]=='O'){
			k+=4;
			r=!factor();
		}
		else 
			if (S[k]=='T' && S[k+1]=='R'){
				r=1;
				k+=5;
			}
			else
				if (S[k]=='F' && S[k+1]=='A'){
					r=0;
					k+=6;
				}
				else{
					r=var[S[k]-'A'];
					k+=2;
				}
	return r;
}

int main(){
	fin.get(S,MaxS,'\n');
	fin.get();
	fin>>N; fin.get();
	fin.get(sch,MaxN,'\n');
	fin.close();
	for(int i=0;i<N;i++){
		var[sch[i]-'A']=1-var[sch[i]-'A'];
		k=0;
		fout<<eval();
	}
	fout.close();
}