Pagini recente » Cod sursa (job #3268857) | Cod sursa (job #2131775) | Cod sursa (job #1270183) | Cod sursa (job #2840058) | Cod sursa (job #74261)
Cod sursa(job #74261)
#include <cstdio>
#include <string>
#define fin "bool.in"
#define fout "bool.out"
#define Nmax 1001
#define DBGxz
#define FL
char buff[Nmax],e[Nmax],epol[Nmax],v[256];
int N,dim,p,st[Nmax],dim1,poz[Nmax];
int grad[256]; //tin gradul operanzilor
char tmp[Nmax];
int eval()
{
int i,j;
tmp[1]=1;
for (i=1;i<=dim;++i)
if ('A'<=e[i] && e[i]<='Z' || e[i]=='t' || e[i]=='f')
tmp[i]=v[e[i]];
else
tmp[i]=e[i];
dim1=dim;
while (dim1>1)
{
//rez NOT
for (i=1;i<=dim1;++i)
if (tmp[i]=='!' && (tmp[i+1]==0 || tmp[i+1]==1))
{
tmp[i]=(!tmp[i+1]);
for (j=i+1;j<dim1;++j)
tmp[j]=tmp[j+1];
--dim1;
}
#ifdef DBG
for (i=1;i<=dim1;++i)
if (tmp[i]!=0 && tmp[i]!=1)
printf("%c",tmp[i]);
else
printf("%c",tmp[i]+'0');
printf("\n");
#endif
//rez SI
for (i=1;i<=dim1;++i)
if (tmp[i]=='&' && (tmp[i-1]==0 || tmp[i-1]==1) && (tmp[i+1]==0 || tmp[i+1]==1) && tmp[i-2]!='!')
{
tmp[i-1]=(tmp[i-1]&tmp[i+1]);
for (j=i;j<dim1-1;++j)
tmp[j]=tmp[j+2];
dim1-=2;
}
#ifdef DBG
for (i=1;i<=dim1;++i)
if (tmp[i]!=0 && tmp[i]!=1)
printf("%c",tmp[i]);
else
printf("%c",tmp[i]+'0');
printf("\n");
#endif
//rez SAU
for (i=1;i<=dim1;++i)
if (tmp[i]=='|' && (tmp[i-1]==0 || tmp[i-1]==1) && (tmp[i+1]==0 || tmp[i+1]==1) && tmp[i+2]!='&' && tmp[i-2]!='&')
{
tmp[i-1]=(tmp[i-1]|tmp[i+1]);
for (j=i;j<dim1-1;++j)
tmp[j]=tmp[j+2];
dim1-=2;
}
#ifdef DBG
for (i=1;i<=dim1;++i)
if (tmp[i]!=0 && tmp[i]!=1)
printf("%c",tmp[i]);
else
printf("%c",tmp[i]+'0');
printf("\n");
#endif
//rez ()
for (i=1;i<=dim1;++i)
if ( (tmp[i]==0 || tmp[i]==1) && tmp[i-1]=='(' && tmp[i+1]==')')
{
tmp[i-1]=tmp[i];
for (j=i;j<dim1;++j)
tmp[j]=tmp[j+2];
dim1-=2;
}
#ifdef DBG
for (i=1;i<=dim1;++i)
if (tmp[i]!=0 && tmp[i]!=1)
printf("%c",tmp[i]);
else
printf("%c",tmp[i]+'0');
printf("\n\n");
#endif
}
return tmp[1];
}
int main()
{
int i;
char c;
freopen(fin,"r",stdin);
#ifdef FL
freopen(fout,"w",stdout);
#endif
fgets(buff,Nmax,stdin);
#ifdef DBG
printf("%s\n",buff);
#endif
dim=1;
e[dim]='(';
for (i=0;buff[i]!='\n';)
{
if (buff[i]=='A')
if (buff[i+1]!='N' || buff[i+2]!='D')
{
++i;
e[++dim]='A';
}
else
{
i+=3;
e[++dim]='&';
}
else
if (buff[i]=='N')
if (buff[i+1]!='O' || buff[i+2]!='T')
{
++i;
e[++dim]='N';
}
else
{
i+=3;
e[++dim]='!';
}
else
if (buff[i]=='O')
if (buff[i+1]!='R')
{
++i;
e[++dim]='O';
}
else
{
i+=2;
e[++dim]='|';
}
else
if (buff[i]=='T')
if (buff[i+1]!='R' || buff[i+2]!='U' || buff[i+3]!='E')
{
++i;
e[++dim]='T';
}
else
{
i+=4;
e[++dim]='t';
}
else
if (buff[i]=='F')
if (buff[i+1]!='A' || buff[i+2]!='L' || buff[i+3]!='S' || buff[i+4]!='E')
{
++i;
e[++dim]='F';
}
else
{
i+=5;
e[++dim]='f';
}
else
if (buff[i]==')')
{
++i;
e[++dim]=')';
}
else
if (buff[i]=='(')
{
++i;
e[++dim]='(';
}
else
{
if (buff[i]!=' ')
e[++dim]=buff[i];
++i;
}
}
++dim;
e[dim]=')';
#ifdef DBG
for (i=1;i<=dim;++i)
printf("%c",e[i]);
printf("\n");
#endif
scanf("%d",&N);
fgetc(stdin);
v[(int)'t']=1; v[(int)'f']=0;
// v['Q']=1; v['Z']=1; v['T']=1;
for (i=0;i<N;++i)
{
c=fgetc(stdin);
v[(int)c]=(!v[(int)c]);
printf("%d",eval());
}
printf("\n");
return 0;
}