Cod sursa(job #634580)
#include<fstream>
#include<string.h>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
char v[1005],mod[105],expr[1000][5];
int n,i,s[1005],nr[1000],b,knr,kexpr,a,rez,k,k1;
int rezolvare(int poz)
{
int j=0;knr=0;kexpr=0;k=0;k1=0;
if((s[mod[poz]-'A'])==1) s[mod[poz]-'A']=0;
else
{s[mod[poz]-'A']=1;}
while(j<b)
{
if(v[j]>='A' && v[j]<='Z' && (v[j+1]==' ' || j==b-1 || v[j+1]==')'))
{
nr[++knr]=s[v[j]-'A'];j++;
while(knr>=2 && (strcmp(expr[kexpr],"NOT")==0 || strcmp(expr[kexpr],"AND")==0))
{
if(strcmp(expr[kexpr],"NOT")==0)
{
nr[knr]=!nr[knr];
kexpr--;
}
if(strcmp(expr[kexpr],"AND")==0)
{
nr[knr-1]=nr[knr] && nr[knr-1];
knr--;kexpr--;
}
}
}
else
{
if(v[j]>='A' && v[j]<='Z' && v[j+1]!=' ')
{
if(v[j]=='A' || v[j]=='N')
{
if(v[j]=='A') strcpy(expr[++kexpr],"AND");
if(v[j]=='N') strcpy(expr[++kexpr],"NOT");
j=j+3;
}
else
{
if(v[j]=='T') {nr[++knr]=1;j=j+4;}
else
{
if(v[j]=='F') {nr[++knr]=0;j=j+5;}
else
{
if(v[j]=='O') {strcpy(expr[++kexpr],"OR");j=j+2;}
}
}
}
}
else
{
if(v[j]=='(')
{strcpy(expr[++kexpr],"(");j++;}
else
{
if(v[j]==')')
{
while(strcmp(expr[kexpr],"(")!=0)
if(strcmp(expr[kexpr],"OR")==0)
{
nr[knr-1]=nr[knr] || nr[knr-1];
knr--;kexpr--;
}
kexpr--;j++;
}
else{j++;}
}
}
}
}
while(kexpr>=1)
{
if(strcmp(expr[kexpr],"NOT")==0)
{
nr[knr]=!nr[knr];
kexpr--;
}
if(strcmp(expr[kexpr],"AND")==0)
{
nr[knr-1]=nr[knr] && nr[knr-1];
knr--;kexpr--;
}
if(strcmp(expr[kexpr],"OR")==0)
{
nr[knr-1]=nr[knr] || nr[knr-1];
knr--;kexpr--;
}
}
return nr[knr];
}
int main()
{
f.getline(v,1005,'\n');
f>>n;f.get();f.getline(mod,105,'\n');
a=strlen(mod);b=strlen(v);
for(i=0;i<a;i++)
{
rez=rezolvare(i);
g<<rez;
}
return 0;
}