Cod sursa(job #905872)

Utilizator iarbaCrestez Paul iarba Data 6 martie 2013 11:42:35
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <cstdio>
#include <fstream>
#include <cstring>
using namespace std;
int litere[30],n,k,i,c,st;
char expresie[1010],p;
FILE *f;
int rezolva()
{
	st++;
	int noturi=1,semn,val=0;
	while(st<n+1){
		if((expresie[st]>='A')&&(expresie[st]<='Z')){
			if((expresie[st-2]='A')&&(expresie[st-1]='N')&&(expresie[st]='D')){semn=1;}
			if((expresie[st-2]='N')&&(expresie[st-1]='O')&&(expresie[st]='T')){semn=2;}
			if(						 (expresie[st-1]='O')&&(expresie[st]='R')){semn=3;}
													}
		if((expresie[st]==' ')||(expresie[st]==')'))						{
if(((expresie[st-1]>='A')&&(expresie[st-1]<='Z'))&&((expresie[st-2]<'A')||(expresie[st-2]>'Z'))){
	if(val==0){val=noturi*litere[expresie[st-1]-'A'+1];}
	else{
		if(semn==2){val=noturi*=1;}
		if(semn==1){val=noturi*(val&&litere[expresie[st-1]-'A'+1]);noturi=1;}
		if(semn==3){val=noturi*(val||litere[expresie[st-1]-'A'+1]);noturi=1;}
		semn=0;
		}
																								}
													}
			   
		if(expresie[st]=='('){
		if(semn==2){val=noturi*=1;}
		if(semn==1){val=noturi*rezolva();noturi=1;}
		if(semn==3){val=noturi*rezolva();noturi=1;}
		semn=0;
							 }
		if(expresie[st]==')'){
			return noturi*val;
							 }
		st++;
			   }
}
int main()
{
	ifstream f("bool.in");
	freopen("bool.out","w",stdout);
	f.getline(expresie,1010);
	n=strlen(expresie);
	expresie[n]=')';
	f>>k; 
	for(i=1;i<=30;i++){litere[i]=-1;}
	for(i=1;i<=k;i++){
		f>>p;
		litere[p-'A'+1]*=-1;
		st=-1;
		c=rezolva();
		printf("%d",c);
					 }
return 0;
}