Cod sursa(job #1914529)

Utilizator stelian2000Stelian Chichirim stelian2000 Data 8 martie 2017 17:21:41
Problema Bool Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <cstdio>
#include <cstring>

using namespace std;

int poz,v1[50],tip;
char sir[1010];

int solve()
{
    int sol=0,p=1;
    while(sir[poz]!=')')
    {
        if(sir[poz]==' ') poz++;
        else if(sir[poz]=='A' && sir[poz+1]=='N') poz+=3;
        else if(sir[poz]=='O' && sir[poz+1]=='R') {sol=sol|p;p=1;poz+=2;}
        else
        {
            int x,t=0;
            while(sir[poz]=='N' && sir[poz+1]=='O') {t=!t;poz+=3;}
            if(sir[poz]==' ') poz++;
            if(sir[poz]=='(') {poz++;x=solve();}
            else if(sir[poz]=='T') {x=1;poz+=4;}
            else if(sir[poz]=='F') {x=0;poz+=5;}
            else if(sir[poz]>='A' && sir[poz]<='Z') {x=v1[sir[poz]-'A'];poz++;}
            p=p&(x^t);
        }
    }
    sol=sol|p;
    poz++;
    return sol;
}

int main()
{
    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);
    int n;
    char c;
    gets(sir+1);
    int l=strlen(sir+1);
    sir[++l]=')';
    scanf("%d\n",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%c",&c);
        v1[c-'A']=1-v1[c-'A'];
        poz=1;
        printf("%d",solve());
    }
    return 0;
}