Cod sursa(job #979876)

Utilizator Impaler_009Mihai Nitu Impaler_009 Data 3 august 2013 02:23:54
Problema Bool Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
#include <string>

using namespace std;

ifstream fin("bool.in");
ofstream fout("bool.out");

char c;
string s;
int status[30];
int i,n;

int pr2(); int pr3(); int pr4();

int pr1 ()
{
    while (s[i]==' ') ++i;

    int res = pr2 ();
    while (s[i]=='O'&&s[i+1]=='R')
    {
        i+=2;
        res  |= pr2();
    }
    return res;
}

int pr2 ()
{
    while (s[i]==' ') ++i;

    int res = pr3 ();
    while (s[i]=='A'&&s[i+1]=='N')
    {
        i+=3;
        res &= pr3();
    }
    return res;
}

int pr3 ()
{
    while (s[i]==' ') ++i;
    int res = 0;
    while (s[i]=='N'&&s[i+1]=='O')
    {
        i+=4;
        res = 1-res;
    }
    res = res ^ pr4();
    return res;
}

int pr4 ()
{
    int res=0;
    while (s[i]==' ') ++i;

    if (s[i]=='(')
    {
        ++i;
        res = pr1();
        ++i;
        return res;
    }

    else if (s[i]=='T' && s[i+1]=='R') {res=1; i+=4;}
    else if (s[i]=='F' && s[i+1]=='A') {res=0; i+=5;}
    else {res = status [s[i]-'A']; ++i;}

    return res;
}

int main()
{
     getline (fin,s);

     fin>>n;

     for (int j=1; j<=n; j++)
     {
         fin>>c;
         status [c-'A'] = 1 - status[c-'A'];
         i=0;
         fout<< pr1();
     }
}