Cod sursa(job #2412177)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 21 aprilie 2019 18:52:12
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.91 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 first=j;
        int r=termen();
        while(isOR())
        {
                j+=2;
                r|=termen();
        }
        return r;
}

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

int factor()
{
        bool ps=0;
        while(isNOT())
        {
                ps^=1;
                j+=3;
        }
        if(s[j]=='(')
        {
                j++;
                int r=expresie();
                j++;
                return (r^ps);
        }
        if(isTRUE())
        {
                j+=4;
                return (1^ps);
        }
        if(isFALSE())
        {
                j+=5;
                return (0^ps);
        }
        j++;
        return (value[s[j-1]-'A']^ps);
}

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(int i=0;i<(int)Str.size();i++)
        {
                auto x=Str[i];
                value[x-'A']^=1;
                j=0;
                cout<<expresie();
        }
        cout<<"\n";
}