Cod sursa(job #633868)
#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];
int rezolvare(char mod[i],int rez)
{
int i=0;
if(s[mod[i]-'A'])==1) s[mod[i]-'A']=0;
else
{s[mod[i]-'A']=1;}
while(i<b)
{
if(v[i]>='A' && v[i]<='Z' && v[i+1]==' ')
{
nr[++knr]=s[mod[i]-'A'];i++;
while(knr>=2 && (expr[kexpr]=="NOT" || expr[kexpr]=="AND"))
{
if(expr[kexpr]=="NOT")
{
if(nr[knr]==0) nr[knr]=1;
if(nr[knr]==1) nr[knr]=0;
kexpr--;
}
if(expr[kexpr]=="AND")
{
nr[knr-1]=nr[knr] && nr[knr-1];
knr--;kexpr--;
}
}
if(v[i]>='A' && v[i]<='Z' && v[i+1]!=' ')
{
if(v[i]=='A' || v[i]=='N')
{
i=i+3;
if(v[i]=='A') strcpy(expr[++kexpr],"AND");
if(v[i]=='N') strcpy(expr[++kexpr],"NOT");
}
if(v[i]=='T') {nr[++knr]=1;i=i+4;}
if(v[i]=='F') {nr[++knr]=0;i=i+5;}
if(v[i]=='O') {strcpy(expr[++kexpr],"OR");i=i+2;}
}
if(v[i]=='(') {expr[++kexpr]='(';}
int main()
{
for(i=0
f.getline(v,1005,'\n');
f>>n;f.getline(mod,105,'\n');
a=strlen(mod);b=strlen(v);
for(i=0;i<a;i++)
{
rezolvare(mod[i],rez);
g<<rez;
}
return 0;
}