Pagini recente » Cod sursa (job #1226389) | Cod sursa (job #1941204) | Cod sursa (job #1902190) | Cod sursa (job #3215652) | Cod sursa (job #2320310)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin ("bool.in");
ofstream cout ("bool.out");
char s[1003];
int v[1000];
int p;
bool expresie();
bool termen();
bool factor();
bool expresie ()
{
int sum=termen();
while(s[p]=='|')
{
++p;
sum|=termen();
}
return sum;
}
bool termen ()
{
int sum=factor();
while(s[p]=='&')
{
++p;
sum&=factor();
}
return sum;
}
bool factor ()
{
int sum=0,val=0;
while(s[p]=='-')
{
++sum;
++p;
}
if(s[p]=='(')
{
++p;
sum+=expresie();
++p;
// sum+=val;
return sum%2;
}
sum+=v[s[p]-'A'];
++p;
/* while(s[p]>='0' && s[p]<='9')
{
val=val*10+(s[p]-'0');
++p;
}*/
return sum%2;
}
int main()
{
long long r,i,cur=0,cnt=0,inmul,imp=2,k=-1;
cin.getline(s,1000);
int n=strlen(s);
v['Z'-'A'+1]=1;
for(i=0;i<n;++i)
{
if(s[i]=='T' && s[i+1]=='R')
s[++k]='Z'+1;
else
if(s[i]=='F' && s[i+1]=='A')
s[++k]='Z'+2;
else
if(s[i]=='N' && s[i+1]=='O')
s[++k]='-';
else
if(s[i]=='A' && s[i+1]=='N')
s[++k]='&';
else
if(s[i]=='O' && s[i+1]=='R')
s[++k]='|';
else
if((s[i]<'A' || s[i]>'Z') && s[i]!=' ')
s[++k]=s[i];
else
if(s[i]>='A' && s[i]<='Z' && (i==0 || ((s[i-1]<'A' || s[i-1]>'Z') && s[i-1]!='-' && s[i-1]!='|' && s[i-1]!='&')))
s[++k]=s[i];
}
for(i=k+1;i<n;++i)
s[i]=0;
// cout<<s<<'\n';
n=k;
int m;
cin>>m;
for(i=1;i<=m;++i)
{
char c;
cin>>c;
c-='A';
++v[c];
v[c]&=1;
p=0;
cout<<expresie();
}
}