Cod sursa(job #598129)
# include <fstream>
# include <cstring>
using namespace std;
ifstream f ("bool.in");
ofstream g ("bool.out");
char a[1020];
char b[1020];
int n, i, in, l, ll, v[300];
char c;
int si ();
int sau ();
int nu ();
int si ()
{
int v1 = sau ();
while (a[in] == '&')
{
++in;
int v2 = sau ();
return v1 & v2;
}
return v1;
}
int sau ()
{
int v1 = nu ();
while (a[in] == '|')
{
++in;
int v2 = nu ();
return v1 | v2;
}
return v1;
}
int nu ()
{
int v1 = 0;
if (a[in] == '!')
{
v1 = 1;
}
else
if (a[in] == '(')
{
++in;
v1 = v1 ^ si ();
++in;
}
else
{
v1 ^= v[a[in] - 0];
++in;
}
return v1;
}
int main ()
{
f.get (a, 1010);
l = strlen (a);
f >> n;
for (i = 0; i < l; )
{
if (a[i] == 'A' && a[i + 1] == 'N' && a[i + 2] == 'D')
{
b[ll++] = '&';
i += 3;
}
else
if (a[i] == 'O' && a[i + 1] == 'R')
{
b[ll++] = '|';
i += 2;
}
else
if (a[i] == 'N' && a[i + 1] == 'O' && a[i + 2] == 'T')
{
b[ll++] = '!';
i += 3;
}
else
if (a[i] == 'T' && a[i + 1] == 'R' && a[i + 2] == 'U' && a[i + 3] == 'E')
{
b[ll++] = '1';
i += 4;
}
else
if (a[i] == 'F' && a[i + 1] == 'A' && a[i + 2] == 'L' && a[i + 3] == 'S' && a[i + 4] == 'E')
{
b[ll++] = '0';
i += 5;
}
if (a[i] >= 'A' && a[i] <= 'Z')
{
b[ll++] = a[i];
++i;
}
else
if (a[i] == '(' || a[i] == ')')
{
b[ll++] = a[i];
++i;
}
else ++i;
}
memcpy (a, b, sizeof (b));
for (i = 1; i <= n; ++i)
{
f >> c;
in = 0;
v[c - 0] = !v[c - 0];
g << si ();
}
}