Cod sursa(job #1003028)

Utilizator sebinechitasebi nechita sebinechita Data 29 septembrie 2013 17:13:10
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
#include <climits>
#include <algorithm>
#include <cmath>
#include <queue>
#include <iomanip>
using namespace std;

ifstream fin("bool.in");
ofstream fout("bool.out");
#define baza 10
#define MAX 100000

typedef long long int lli;

char S[MAX+10],*p=S, c[MAX];

int n;

bool a[30];

int termen();
int factor();

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

int eval()
{
    spatiu();
    int r=termen();
    spatiu();
    while(p[0]=='O' && p[1]=='R')
    {
        p+=2;
        r|=termen();
        spatiu();
    }
    spatiu();
    return r;
}

int termen()
{
    spatiu();
    int r=factor();
    spatiu();
    while(p[0]=='A' && p[1]=='N' && p[2]=='D')
    {
        p+=3;
        r&=factor();
        spatiu();
    }
    spatiu();
    return r;

}


int factor()
{
    int r=0;
    spatiu();
    if(*p=='(')
    {
        p++;
        r=eval();
        p++;
    }

    else if(*p=='T' && *(p+1)=='R' && *(p+2)=='U' && *(p+3)=='E')
    {
        p+=4;
        r=1;
    }
    else if(*p=='F' && *(p+1)=='A' && *(p+2)=='L' && *(p+3)=='S' && *(p+4)=='E')
    {
        p+=5;
        r=0;
    }
    else if(*p=='N' && *(p+1)=='O' && *(p+2)=='T')
    {
        p+=3;
        r=factor()^1;
    }
    else
    {
        r=a[*p-'A'+1];
        p++;

    }
    spatiu();


    return r;
}


int main()
{
    fin.getline(S,MAX);
    fin>>n;
    fin.get(c[0]);
    fin.getline(c,MAX);

    for(int i=0;i<n;i++)
    {
        a[c[i]-'A'+1]^=1;
        p=S;
        fout<<eval();

    }
    return 0;
}