Pagini recente » Cod sursa (job #177753) | Cod sursa (job #866827) | Cod sursa (job #1804818) | Cod sursa (job #1184146) | Cod sursa (job #1835255)
#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
string s;
int n, it;
bool v[26];
char c;
string transf(string s)
{
string rez = "";
int i = 0;
int len = s.size();
while(i < len)
if(s[i] == ' ')
++i;
else if(i+1 < len && s[i] == 'N' && s[i+1] == 'O')
rez += '!', i += 3;
else if(i+1 < len && s[i] == 'A' && s[i+1] == 'N')
rez += '&', i += 3;
else if(i+1 < len && s[i] == 'O' && s[i+1] == 'R')
rez += '|', i += 2;
else if(i+1 < len && s[i] == 'T' && s[i+1] == 'R')
rez += '1', i += 4;
else if(i+1 < len && s[i] == 'F' && s[i+1] == 'A')
rez += '0', i += 5;
else
rez += s[i], ++i;
return rez;
}
bool term();
bool fact();
bool expr()
{
bool val = term();
while(s[it] == '|')
++it, val |= term();
return val;
}
bool term()
{
bool val = fact();
while(s[it] == '&')
++it, val &= fact();
return val;
}
bool fact()
{
if(s[it] == '!')
{
++it;
return !fact();
}
else if(s[it] == '(')
{
++it;
bool val = expr();
++it;
return val;
}
else if(s[it] == '1')
{
++it;
return 1;
}
else if(s[it] == '0')
{
++it;
return 0;
}
++it;
return v[s[it-1] - 65];
}
int main()
{
ios_base::sync_with_stdio(false);
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
getline(cin, s);
s = transf(s);
cin >> n;
while(n--)
{
cin >> c;
v[c-65] ^= 1;
it = 0;
cout << expr();
}
return 0;
}