Pagini recente » Cod sursa (job #1904591) | Cod sursa (job #1720908) | Cod sursa (job #2826226) | Cod sursa (job #1983819) | Cod sursa (job #3250784)
#include <bits/stdc++.h>
#define N 100005
#define L 130
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
bool si();
bool sau();
bool nu();
bool factor();
int n,i,j,x,q,val[L];
char s[N],t[N],init[N];
void initialise()
{
fin.getline(init,N-2);
n=strlen(init);
for(i=0;i<n;++i)
{
if(init[i]==' ') continue;
else if(init[i]=='T' && init[i+1]=='R')
{
s[j]='1';
j++;
i+=3;
}
else if(init[i]=='F' && init[i+1]=='A')
{
s[j]='0';
j++;
i+=4;
}
else if(init[i]=='N' && init[i+1]=='O')
{
s[j]='!';
j++;
i+=2;
}
else if(init[i]=='A' && init[i+1]=='N')
{
s[j]='&';
j++;
i+=2;
}
else if(init[i]=='O' && init[i+1]=='R')
{
s[j]='|';
j++;
i++;
}
else
{
s[j]=init[i];
j++;
}
}
n=j;
}
void become()
{
for(i=0;i<n;++i)
{
if('A'<=s[i] && s[i]<='Z') t[i]=val[s[i]]+'0';
else t[i]=s[i];
}
}
int main()
{
initialise();
fin>>q;
while(q--)
{
char ch;
fin>>ch;
val[ch]=1-val[ch];
become();
i=0;
fout<<sau();
}
return 0;
}
bool sau()
{
bool x=si();
while(i<n && t[i]=='|')
{
i++;
x|=si();
}
return x;
}
bool si()
{
bool x=nu();
while(i<n && t[i]=='&')
{
i++;
x&=nu();
}
return x;
}
bool nu()
{
if(t[i]=='!')
{
while(i<n && t[i]=='!')
{
i++;
return 1-nu();
}
}
else
return factor();
}
bool factor()
{
int x=0;
if(t[i]=='(')
{
i++;
x=sau();
i++;
}
else
{
x=t[i]-'0';
i++;
}
return x;
}