Cod sursa(job #1528399)

Utilizator Theodor1000Cristea Theodor Stefan Theodor1000 Data 19 noiembrie 2015 17:20:59
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <string>

using namespace std;

char ss[1024];
string v;
int a[256], k;

inline int unu ();
inline int doi ();
inline int trei ();

inline int unu ()
{
    int rez = doi ();
    while (v[k] == '|')
        ++k, rez |= doi ();

    return rez;
}

inline int doi ()
{
    int rez = trei ();
    while (v[k] == '&')
        ++k, rez &= trei ();

    return rez;
}

inline int trei ()
{
    int rez;
    if (v[k] == '!')
    {
        ++k;
        return 1 ^ trei ();
    }

    if (v[k] == '(')
    {
        ++k;
        int rez = unu ();

        ++k;
        return rez;
    }

    ++k;
    return a[v[k - 1]];
}

int main ()
{
    freopen ("bool.in", "r", stdin);
    freopen ("bool.out", "w", stdout);

    gets (ss);

    a['1'] = 1;
    int nn = strlen (ss);
    for (int i = 0; i < nn; ++i)
    {
        if (ss[i] == ' ') continue;
        else if (ss[i] == 'T' && ss[i + 1] == 'R') v += '1', i += 3;
        else if (ss[i] == 'F' && ss[i + 1] == 'A') v += '0', i += 4;
        else if (ss[i] == 'O' && ss[i + 1] == 'R') v += '|', ++i;
        else if (ss[i] == 'A' && ss[i + 1] == 'N') v += '&', i += 2;
        else if (ss[i] == 'N' && ss[i + 1] == 'O') v += '!', i += 2;
        else v += ss[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", unu ());
    }

    printf ("\n");

    return 0;
}