Cod sursa(job #907814)

Utilizator BlackLordFMI Alex Oprea BlackLord Data 8 martie 2013 13:01:22
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.23 kb
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int n, i, m, j, p, u;
char s[2010], c[110], *a, sir[2010];
bool v[110], aux;

int OR();
int AND();
int NSP();

int AND(){
    int rez=NSP();
    while( (*a)=='&' )
    {
        p++;
        rez&=NSP();
    }
    return rez;
}

int NSP(){
    int rez;
    if( (*a)=='(' )
    {
        p++;
        rez=OR();
        p++;
    }
    else
    {
        if( (*a) == '!' )
        {
            p++;
            rez=NSP();
            rez^=1;
        }
        else
        {
            if( (*a)=='1' )
            {
                rez = 1;
                p++;
            }
            else
            {
                if( (*a)=='0' )
                {
                    rez=0;
                    p++;
                }
                else
                {
                    rez=v[ (*a)-'A' ];
                    p++;
                }
            }
        }
    }
    return rez;
}

int OR(){
    int rez=AND();
    while( (*a)== '|' )
    {
        p++;
        rez|=AND();
    }
    return rez;
}

int main(){
    f.get(s+1, 2000);
    f.get();
    f>>n;
    f.get();
    f.get(c, n);
    f.close();
    m=strlen(s+1);
    j=0;
    for(i=1; i<=m; i++)
    {
        if(s[i]=='A' && s[i+1]=='N' && s[i+2]=='D')
        {
            sir[++j]='&';
            i+=3;
        }
        else if(s[i]=='T' && s[i+1]=='R' && s[i+2]=='U' && s[i+3]=='E')
        {
            sir[++j]='1';
            i+=4;
        }
        else if(s[i]=='F' && s[i+1]=='A' && s[i+2]=='L' && s[i+3]=='S' && s[i+4]=='E')
        {
            sir[++j]='0';
            i+=5;
        }
        else if(s[i]=='N' && s[i+1]=='O' && s[i+2]=='T')
        {
            sir[++j]='^';
            i+=3;
        }
        else if(s[i]=='O' && s[i+1]=='R')
        {
            sir[++j]='|';
            i+=2;
        }
    }
    m=j;
    sir[j+1]='\n';
    for(i=0; i<n; i++)
    {
        v[ c[i]-'A' ]^=1;
        a=sir;
        aux=OR();
        if(aux==0)
            aux=1;
        else
            aux=0;
        g<<aux;
    }
    g.close();
    return 0;
}