Cod sursa(job #1003507)

Utilizator manutrutaEmanuel Truta manutruta Data 30 septembrie 2013 20:29:25
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <iostream>
#include <fstream>
using namespace std;

#define MAXS 100010

ifstream f("bool.in");
ofstream g("bool.out");

char s[MAXS], *p = s, a[MAXS];
int n;
bool val[30];

int termen();
int factor();

void space()
{
    while (*p == ' ') {
        p++;
    }
}

int eval()
{
    space();
    int nr = termen();
    space();

    while (p[0] == 'O' && p[1] == 'R') {
        p += 2;
        nr |= termen();
        space();
    }

    return nr;
}

int termen()
{
    space();
    int nr = factor();
    space();

    while (p[0] == 'A' && p[1] == 'N') {
        p += 3;
        nr &= factor();
        space();
    }

    return nr;
}

int factor()
{
    int nr = 0;
    space();

    if (*p == '(') {
        p++;
        nr = eval();
        p++;
    } else if (p[0] == 'T' && p[1] == 'R') {
        p += 4;
        nr = 1;
    } else if (p[0] == 'F' && p[1] == 'A') {
        p += 5;
        nr = 0;
    } else if (p[0] == 'N' && p[1] == 'O') {
        p += 3;
        nr = factor() ^ 1;
    } else {
        nr = val[*p - 'A' + 1];
        p++;
    }
    space();

    return nr;
}

int main()
{
    f.getline(s, MAXS);
    f >> n;
    f.get();
    f.getline(a, MAXS);

    for(int i = 0; i < n; i++)
    {
        val[a[i] - 'A' + 1] ^= 1;
        p = s;
        g << eval();

    }
    return 0;
}