Pagini recente » Istoria paginii utilizator/mihaisoare22 | Cod sursa (job #996961) | Monitorul de evaluare | Istoria paginii utilizator/pes8gax | Cod sursa (job #1554953)
#include <cstring>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
/*evaluating a given expression */
using namespace std;
char x[1024];
string v;
int a[256], k;
inline int one ();
inline int two ();
inline int three ();
inline int one ()
{
int result = two ();
while (v[k] == '|')
++k, result |= two ();
return result;
}
inline int two ()
{
int result = three ();
while (v[k] == '&')
++k, result &= three ();
return result;
}
inline int three ()
{
int result;
if (v[k] == '!')
{
++k;
return 1 ^ three ();
}
if (v[k] == '(')
{
++k;
int result = one ();
++k;
return result;
}
++k;
return a[v[k - 1]];
}
int main ()
{
freopen ("bool.in", "r", stdin);
/* in file bool.in we have : the expression on first line , for ex ( a or ( b or c) and (true)) ,2nd line its how many times a,b,c was modified ,
3rd line is which of a,b,c is modified */
freopen ("bool.out", "w", stdout);
gets (x);
a['1'] = 1;
int nn = strlen (x);
for (int i = 0; i < nn; ++i)
{
if (x[i] == ' ') continue;
else if (x[i] == 'T' && x[i + 1] == 'R') v += '1', i += 3; // true
else if (x[i] == 'F' && x[i + 1] == 'A') v += '0', i += 4; // false
else if (x[i] == 'O' && x[i + 1] == 'R') v += '|', ++i; // or
else if (x[i] == 'A' && x[i + 1] == 'N') v += '&', i += 2; // and
else if (x[i] == 'N' && x[i + 1] == 'O') v += '!', i += 2; // not
else v += x[i];
}
int n;
scanf ("%d\n", &n);
for (int i = 1; i <= n; ++i)
{
char c;
scanf ("%c", &c);
a[c] ^= 1;
k = 0;
printf ("%d", one ());
}
printf ("\n");
return 0;
}