Cod sursa(job #2260337)

Utilizator andreiomd1Onut Andrei andreiomd1 Data 14 octombrie 2018 20:52:38
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("bool.in");
ofstream g("bool.out");

const int NMAX=1e3;

char s[NMAX+5], SOL[NMAX+5];

int N, i, S, poz;

int curent[30];

int eval();
int factor();
int termen();

int eval()
{
    int ans=factor();

    while(s[poz]!=')' && s[poz])
    {
        poz+=4;
        ans|=factor();
    }

    return ans;
}

int factor()
{
    int ans=termen();

    while(s[poz+1]=='A' && s[poz])
    {
        poz+=5;
        ans&=termen();
    }

    return ans;
}

int termen()
{
    if(s[poz]=='N' && s[poz+1]=='O' && s[poz+2]=='T')
    {
        poz+=4;

        return !termen();
    }

    else if(s[poz]=='T' && s[poz+1]=='R' && s[poz+2]=='U' && s[poz+3]=='E')
    {
        poz+=4;

        return 1;
    }

    else if(s[poz]=='F' && s[poz+1]=='A' && s[poz+2]=='L' && s[poz+3]=='S' && s[poz+4]=='E')
    {
        poz+=5;

        return 0;
    }
    else if(s[poz]=='(')
    {
        int ans;
        poz++;
        ans=eval();
        poz++;

        return ans;
    }
    else
    {
        poz++;

        return curent[s[poz-1]-'A'];
    }
}

int main()
{
    f.getline(s, NMAX+1);

    f>>N>>SOL;

    for(i=1; i<=N; i++)
    {
        curent[SOL[i-1]-'A']=!curent[SOL[i-1]-'A'];

        g<<eval();

        poz=0;
    }

    g<<'\n';

    return 0;
}