Pagini recente » Cod sursa (job #2251367) | Cod sursa (job #2888690) | Cod sursa (job #847750) | Istoria paginii runda/concurs_epic/clasament | Cod sursa (job #2393266)
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int N = 1000 + 7;
char s[N];
int n;
bool value[26];
int v[N], y = 0;
/// "(" = -1
/// ")" = -2
/// "AND" = -3
/// "OR" = -4
/// "NOT" = -5
/// "TRUE" = -6
/// "FALSE" = -7
int p;
bool expresie();
bool termen();
bool factor();
bool expresie()
{
bool a = termen();
while(v[p] == -4)
{
p++;
a |= termen();
}
return a;
}
bool termen()
{
bool a = factor();
while(v[p] == -3)
{
p++;
a &= factor();
}
return a;
}
bool factor()
{
bool inv = 0;
if(v[p] == -5)
{
inv = 1;
p++;
}
if(v[p] == -1)
{
p++;
bool res = expresie();
p++;
return (res ^ inv);
}
bool res;
if(v[p] == -6)
{
res = 1;
}
if(v[p] == -7)
{
res = 0;
}
if(0 <= v[p])
{
res = value[v[p]];
}
p++;
return (res ^ inv);
}
bool calc()
{
p = 0;
return expresie();
}
int main()
{
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
cin.getline(s, N);
n = strlen(s);
for(int i = 0; i < n;)
{
if(s[i] == '(')
{
v[++y] = -1;
i++;
continue;
}
if(s[i] == ')')
{
v[++y] = -2;
i++;
continue;
}
if(s[i] == 'A' && s[i + 1] == 'N' && s[i + 2] == 'D')
{
v[++y] = -3;
i += 3;
continue;
}
if(s[i] == 'O' && s[i + 1] == 'R')
{
v[++y] = -4;
i += 2;
continue;
}
if(s[i] == 'N' && s[i + 1] == 'O' && s[i + 2] == 'T')
{
v[++y] = -5;
i += 3;
continue;
}
if(s[i] == 'T' && s[i + 1] == 'R' && s[i + 2] == 'U' && s[i + 3] == 'E')
{
v[++y] = -6;
i += 4;
continue;
}
if(s[i] == 'F' && s[i + 1] == 'A' && s[i + 2] == 'L' && s[i + 3] == 'E')
{
v[++y] = -7;
i += 4;
continue;
}
if('A' <= s[i] && s[i] <= 'Z')
{
v[++y] = (s[i] - 'A');
}
i++;
}
n = y;
int q;
cin >> q;
string c;
cin >> c;
for(auto &x : c)
{
int y = x - 'A';
value[y] ^= 1;
cout<<(calc());
}
cout<<"\n";
return 0;
}