Cod sursa(job #1784151)

Utilizator adystar00Bunea Andrei adystar00 Data 19 octombrie 2016 20:18:33
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int l,k,val[30];
int evaluare();
int sol();
int elem();
char s[1010];
int evaluare()
{
    int x,y,rez;
    while(s[k]==' '&&k<l)
        k++;
    x=sol();
    rez=x;
    while(s[k]==' '&&k<l)
        k++;
    if(k<l-1)
        while(s[k]=='O'&&s[k+1]=='R')
        {
            k+=2;
            y=sol();
            rez=rez|y;
        }
    while(s[k]==' '&&k<l)
        k++;
    return rez;
}
int sol()
{
    int x,y,rez;
    while(s[k]==' '&&k<l)
        k++;
    x=elem();
    rez=x;
    while(s[k]==' '&&k<l)
        k++;
    if(k<l-2)
        while(s[k]=='A'&&s[k+1]=='N'&&s[k+2]=='D')
        {
            k+=3;
            y=elem();
            rez=rez&y;
        }
    while(s[k]==' '&&k<l)
        k++;
    return rez;
}
int elem()
{
    int rez,x;
    while(s[k]==' '&&k<l)
        k++;
    if(s[k]=='(')
    {
        k++;
        rez=evaluare();
        k++;
    }
    else if(s[k]=='N'&&s[k+1]=='O'&&s[k+2]=='T')
    {
        k+=3;
        rez=1-elem();
    }
    else if(s[k]>='A'&&s[k]<='Z'&&(s[k+1]<'A'||s[k+1]>'Z'))
    {
        rez=val[s[k]-'A'];
        k++;
    }
    else if(s[k]=='T')
    {
        k+=4;
        rez=1;
    }
    else
    {
        k+=5;
        rez=0;
    }
    while(s[k]==' '&&k<l)
        k++;
    return rez;
}
int main()
{
    ifstream fin ("bool.in");
    ofstream fout ("bool.out");
    int n,i;
    char c;
    fin.getline(s,1010);
    l=strlen(s);
    fin>>n;
    for(i=1; i<=n; i++)
    {
        fin>>c;
        val[c-'A']=1-val[c-'A'];
        k=0;
        fout<<evaluare();
    }
    return 0;
}