Cod sursa(job #906788)

Utilizator iarbaCrestez Paul iarba Data 7 martie 2013 10:08:30
Problema Bool Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.94 kb
#include <cstdio>
#include <fstream>
#include <cstring>
using namespace std;
int litere[31],n,k,i,c,st;
char expresie[1010],p;
FILE *f;
int si(int v1,int v2)
{
	if((v1<0)||(v2<0)){return -1;}
	else{return 1;}
}
int sau(int v1,int v2)
{
	if((v1>0)||(v2>0)){return 1;}
	else{return -1;}
}


int rezolva()
{
	st++;int noturi=1,val=1,semn=1;//1 AND 2 OR
	while(st<=n+1){
	if((expresie[st]<='Z')&&(expresie[st]>='A')){
		if((expresie[st+1]>'Z')||(expresie[st+1]<'A')){
			if(semn==1){semn=0;val=si(val,litere[expresie[st]-'A']);}
			if(semn==2){semn=0;val=sau(val,litere[expresie[st]-'A']);}
			st++;
													  }
		else{
			if((expresie[st]=='T')&&(expresie[st+1]=='R')&&(expresie[st+2]=='U')&&(expresie[st+3]=='E')){
						if(semn==1){semn=0;val=si(val,noturi);}
						if(semn==2){semn=0;val=sau(val,noturi);}
						st+=4;
																										}
			if((expresie[st]=='F')&&(expresie[st+1]=='A')&&(expresie[st+2]=='L')&&(expresie[st+3]=='S')&&(expresie[st+4]=='E')){
						if(semn==1){semn=0;val=si(val,noturi*-1);}
						if(semn==2){semn=0;val=sau(val,noturi*-1);}
						st+=5;
																															   }
			if((expresie[st]=='N')&&(expresie[st+1]=='O')&&(expresie[st+2]=='T')){noturi*=-1;st+=3;}
			if((expresie[st]=='A')&&(expresie[st+1]=='N')&&(expresie[st+2]=='D')){semn=1;st+=3;}
			if((expresie[st]=='O')&&(expresie[st+1]=='R')){semn=2;st+=2;}
			}
														}
	if(expresie[st]==' '){st++;}
	if(expresie[st]==')'){st++;return val;}
	if(expresie[st]=='('){
		if(semn==1){semn=0;val=si(val,rezolva());}
		if(semn==2){semn=0;val=sau(val,rezolva());}
						 }
}}
int main()
{
	ifstream f("bool.in");
	freopen("bool.out","w",stdout);
	f.getline(expresie,1010);
	n=strlen(expresie);
	expresie[n]=')';
	f>>k; 
	for(i=0;i<=30;i++){
		litere[i]=-1;
					  }
	for(i=1;i<=k;i++){
		f>>p;
		litere[p-'A']*=-1;
		st=-1;
		c=rezolva();
		if(c==1){printf("%d",c);}
		else{printf("0");}
					 }
return 0;
}