Cod sursa(job #80910)

Utilizator maria_pparcalabescu maria daniela maria_p Data 30 august 2007 16:24:39
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include<stdio.h>
#include<string.h>

long a[64],q,n,not_,w[100];
char s[1000],s1[1000],ch;
int rez(char s[1000], long l, long rel, long chr1){
	long nr,des,inc,i,j=0,chr,ok;
	for(i=0;i<l;i++){
		ok=0;
		if(s[i]=='('){
			des=1;inc=0;nr=-1;
			for(i=i+1;des!=inc;i++){
				nr++;
				s1[nr]=s[i];
				if(s1[nr]=='(')des++;
				else if(s1[nr]==')')inc++;
			}
			chr=rez(s1,nr,0,0);
			ok=1;
		}
		else if(s[i+1]==' ' || (i+1)==l){
			chr=a[s[i]-65];
			ok=1;
		}
		else if(s[i]=='T'){
			chr=1;
			ok=1;
			j=i+3;
		}
		else if(s[i]=='F'){
			chr=0;
			j=i+4;
			ok=1;
		}
		else if(s[i]=='N'){
			not_=1;
			j=i+2;
		}
		else if(s[i]=='A' || s[i]=='O'){
			rel=s[i];
			chr1=chr;
			if(s[i]=='A')j=i+2;
			else j=i+1;
		}
		else continue;
		if(not_==1 && ok==1){
			if(chr==0)chr=1;
			else chr=0;
			not_=0;
		}
		if(rel!=s[i] && rel!=0 && ok==1){
			if(rel=='A')chr=chr1 and chr;
			else chr=chr1 or chr;
			rel=0;
		}
		if(j!=0)i=j;
		j=0;
	}
	return chr;
}
int main(){
	freopen("bool.in","r",stdin);
	freopen("bool.out","w",stdout);
	fgets(s,1000,stdin);
	scanf("%ld",&n);
	fgets(s1,1000,stdin);
	for(q=0;q<n;q++){
		scanf("%c",&ch);
		not_=0;
		if(a[ch-65]==0)a[ch-65]=1;
		else a[ch-65]=0;
		w[q]=rez(s,strlen(s),0,0);
	}
	for(q=0;q<n;q++)
		printf("%ld ",w[q]);
	fclose(stdin);
	fclose(stdout);
	return 0;
}