Cod sursa(job #2391183)

Utilizator dimi999Dimitriu Andrei dimi999 Data 28 martie 2019 18:23:15
Problema Bool Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <bits/stdc++.h>
using namespace std;

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

char s[1005];
int fv[30];
int poz;

int sau();
int si();
int notop();

int termen()
{
    int rez=0;
    if(s[poz]=='(')
    {
        if(poz==23)
        poz++,poz--;
        poz++;
        rez=sau();
        poz++;
        //if(crt==' ')
           // poz++,crt=s[poz];
    }
    else
        if(s[poz]=='N'&&s[poz+1]=='O')
    {
        poz+=4;
        rez=!sau();
    }
        else
    if(s[poz]=='T'&&s[poz+1]=='R')
    {
        poz+=5;
        rez=1;
    }
    else
        if(s[poz]=='F'&&s[poz+1]=='A')
    {
        poz+=6;
        rez=0;
    }
    else
    {
        if(s[poz]=='U')
            poz++,poz--;
        poz+=2;
        rez=fv[s[poz-2]-'A'];
    }
    return rez;
}

int sau()
{
    int rez=si();
        if(s[poz]=='O'&&s[poz+1]=='R')
    {
        poz+=3;
        rez=(rez|si());
    }
    return rez;
}

int si()
{
    int rez=termen();
        if(s[poz]=='A'&&s[poz+1]=='N')
    {
        poz+=4;
        rez=(rez&termen());
    }
    return rez;
}

int main()
{
    char c;
    int n,i;
    fin.getline(s,1000);
    //fin.get();
    fin>>n;
    fin.get();
    for(i=1;i<=n;i++)
    {
        fin>>c;
        if(fv[c-'A']==0)
            fv[c-'A']=1;
        else
            fv[c-'A']=0;
        poz=0;
        fout<<sau();
    }
    return 0;
}