Cod sursa(job #2412153)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 21 aprilie 2019 18:26:47
Problema Bool Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <bits/stdc++.h>

using namespace std;

const int N=1000+7;
char s2[N];
char s[N]; int j,n;
int value[100];

bool isAND() {return (s[j]=='A' && s[j+1]=='N' && s[j+2]=='D');}
bool isOR()  {return (s[j]=='O' && s[j+1]=='R');}
bool isNOT() {return (s[j]=='N' && s[j+1]=='O' && s[j+2]=='T');}
bool isFALSE() {return (s[j]=='F' && s[j+1]=='A' && s[j+2]=='L' && s[j+3]=='S' && s[j+4]=='E');}
bool isTRUE() {return (s[j]=='T' && s[j+1]=='R' && s[j+2]=='U' && s[j+3]=='E');}

int expresie();
int termen();
int factor();

int expresie()
{
        int r=termen();
        while(isOR())
        {
                j+=2;
                r|=(termen());
        }
        return r;
}

int termen()
{
        int r=factor();
        while(isAND())
        {
                j+=3;
                r|=(factor());
        }
        return r;
}

int factor()
{
        if(s[j]=='(')
        {
                j++;
                int r=expresie();
                j++;
                return r;
        }
        if(isTRUE())
        {
                j+=4;
                return 1;
        }
        if(isFALSE())
        {
                j+=5;
                return 1;
        }
        j++;
        return value[s[j]-'A'];
}

int main()
{
        freopen("bool.in","r",stdin); freopen("bool.out","w",stdout);
        cin.getline(s2,N); int FirstSize=strlen(s2);
        for(int j=0;j<FirstSize;j++) if(s2[j]!=' ') s[n++]=s2[j];
        int Q;
        cin>>Q;
        string Str;
        cin>>Str;
        for(auto &x : Str)
        {
                value[x-'A']^=1;
                j=0;
                cout<<expresie();
        }
        cout<<"\n";
}