Cod sursa(job #1796734)

Utilizator ade_tomiEnache Adelina ade_tomi Data 3 noiembrie 2016 18:38:03
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int p, v[30];
string s;
bool solve();
bool fact();
bool term();
bool solve ()
{
    while (s[p] == ' ' && p < s.size())
        p++;
    bool sol = fact();
    while (p < s.size() &&  s[p] == ' ' )
        p++;
    while (p + 1 < s.size() && s[p] == 'O' && s[p + 1] == 'R')
    {
        p += 2;
        bool  x = fact();
        sol = sol | x;
    }
    while (p < s.size() && s[p] == ' ')
        p++;
    return sol;

}
bool fact  ()
{
    while (s[p] == ' ' && p < s.size())
        p++;
    bool sol = term ();
    while (p + 2 < s.size()  && s[p] == 'A' && s[p + 1] == 'N' && s[p + 2] == 'D')
    {
        p += 3;
        bool x = term();
        sol = sol & x;
    }
    while (p < s.size() && (s[p] == ' '))
        p++;
    return sol;
}
bool term ()
{
    bool x;
    while (s[p] == ' ' && p < s.size())
        p++;
    if (s[p] == '(')
    {
        p++;
        x = solve();
        p++;
    }
    else if (p + 2 < s.size() && s[p] == 'N' && s[p + 1] == 'O' && s[p + 2] == 'T')
    {
        p += 3;
        x = 1 - term ();
    }
    else if (p + 3 < s.size() && s[p] == 'T' && s[p + 1] == 'R' && s[p + 2] == 'U' && s[p + 3] == 'E')
    {
        p += 4;
        x = 1;
    }
    else if (p + 4 < s.size() && s[p] == 'F' && s[p + 1] == 'A' && s[p + 2] == 'L' && s[p + 3] == 'S' && s[p + 4] == 'E')
    {
        p += 5;
        x = 0;
    }
    else
    {
        x = v[s[p] - 'A'];
        p++;
    }
    while (p < s.size() && (s[p] == ' '))
        p++;
    return x;

}
int main ()
{
    int n;
    char c;
    ifstream cin ("bool.in");
    ofstream cout ("bool.out");
    getline(cin,s);
    cin >> n;
    //cout << s;
    for (int i = 1; i <= n; i++)
    {
        cin >> c;
        p = 0;
        v[c - 'A'] = 1 - v[c - 'A'];
        cout << solve() ;
    }
    return 0;
}