Cod sursa(job #201717)

Utilizator maria_pparcalabescu maria daniela maria_p Data 3 august 2008 11:55:19
Problema Bool Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<cstdio>
char s[1100],chr;
long i,n,j;
bool a[50];
bool expr();
bool term();
bool elem();
bool expr(){
	bool r=term();
	while(s[i]=='O' && s[i+1]!=' '){
		i+=3;
		j=term();
		r=j || r;
	}
	return r;
}
bool term(){
	bool r=elem();
	while(s[i]=='A' && s[i+1]!=' '){
		i+=4;
		r=r && elem();
	}
	return r;
}
bool elem(){
	bool r=0;
	if(s[i]=='T' && s[i+1]!=' '){
		i+=5;
		r=1;
	}
	if(s[i]=='F' && s[i+1]!=' '){
		r=0;
		i+=6;
	}
	if(s[i]=='('){
		i++;
		r=expr();
		i++;
	}
	if(s[i]=='N' && s[i+1]!=' '){
		i+=4;
		j=(long)(s[i]-'A');
		r=!(a[j]);
	}
	if(s[i+1]==' '){
		j=(long)(s[i]-'A');
		r=a[j];
		i+=2;
	}
	return r;
}
int main(){
	freopen("bool.in","r",stdin);
	freopen("bool.out","w",stdout);
	scanf("%c",&chr);
	j=0;
	while(chr!='\n'){
		s[j++]=chr;
		scanf("%c",&chr);
	}
	scanf("%ld\n",&n);
	for(;n>0;n--){
		scanf("%c",&chr);
		j=(long)(chr-'A');
		a[j]=!(a[j]);
		i=0;
		printf("%ld",expr());
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}