Pagini recente » Romb | Rating Teddy Wells (1avac452ra6) | Cod sursa (job #2412177)
#include <bits/stdc++.h>
using namespace std;
const int N=1000+7;
char s2[N];
char s[N]; int j,n;
int value[100];
bool isAND() {return (s[j]=='A' && s[j+1]=='N' && s[j+2]=='D');}
bool isOR() {return (s[j]=='O' && s[j+1]=='R');}
bool isNOT() {return (s[j]=='N' && s[j+1]=='O' && s[j+2]=='T');}
bool isFALSE() {return (s[j]=='F' && s[j+1]=='A' && s[j+2]=='L' && s[j+3]=='S' && s[j+4]=='E');}
bool isTRUE() {return (s[j]=='T' && s[j+1]=='R' && s[j+2]=='U' && s[j+3]=='E');}
int expresie();
int termen();
int factor();
int expresie()
{
int first=j;
int r=termen();
while(isOR())
{
j+=2;
r|=termen();
}
return r;
}
int termen()
{
int first=j;
int r=factor();
while(isAND())
{
j+=3;
r&=factor();
}
return r;
}
int factor()
{
bool ps=0;
while(isNOT())
{
ps^=1;
j+=3;
}
if(s[j]=='(')
{
j++;
int r=expresie();
j++;
return (r^ps);
}
if(isTRUE())
{
j+=4;
return (1^ps);
}
if(isFALSE())
{
j+=5;
return (0^ps);
}
j++;
return (value[s[j-1]-'A']^ps);
}
int main()
{
freopen("bool.in","r",stdin); freopen("bool.out","w",stdout);
cin.getline(s2,N); int FirstSize=strlen(s2);
for(int j=0;j<FirstSize;j++) if(s2[j]!=' ') s[n++]=s2[j];
int Q;
cin>>Q;
string Str;
cin>>Str;
for(int i=0;i<(int)Str.size();i++)
{
auto x=Str[i];
value[x-'A']^=1;
j=0;
cout<<expresie();
}
cout<<"\n";
}