Cod sursa(job #2338794)

Utilizator cosceexcosceex cosceex Data 7 februarie 2019 20:22:42
Problema Bool Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 5.48 kb
#include <bits/stdc++.h>

using namespace std;

char sir[1005];
char sir2[105];
int v[1005];
bool w[105];
int v2[1005];
int n;

/*int strlen(const char *str){
    const char *s;
    for (s = str; *s; ++s)
        ;
    return (s - str);
}*/
int cauta(int i,int x){
    i++;
    //if(sir[i]=='(')
    while(!(sir[i]>='A'&&sir[i]<='Z'))
            i++;
    int sum=w[sir[i]-'A'];
    for(;i<x && sir[i]!=')';i++)
            if(sir[i]=='A' && sir[i+1]=='N'){//v[++k]=3 , i+=2;
                    if(sir[i+4]=='T'&&sir[i+5]=='R')
                            sum=sum&1 , i+=5;
                    else if(sir[i+4]=='F'&&sir[i+5]=='A')
                            sum=sum&0 ,i+=6;
                    else if(sir[i+4]=='N'&&sir[i+5]=='O')
                            sum=sum&(!w[sir[i+8]-'A']) , i+=8;
                    else if(sir[i+4]=='(')
                            sum=sum&cauta(i+4,x);
                    else
                            sum=sum&w[sir[i+4]-'A'] , i+=4;
            }
            else if(sir[i]=='O' && sir[i+1]=='R'){
                    if(sir[i+3]=='T'&&sir[i+4]=='R')
                        sum=sum|1 , i+=5;
                    else if(sir[i+3]=='F'&&sir[i+4]=='A')
                            sum=sum|0 ,i+=6;
                    else if(sir[i+3]=='N'&&sir[i+4]=='O')
                            sum=sum|(!w[sir[i+7]-'A']) , i+=7;
                    else if(sir[i+3]=='(')
                            sum=sum|cauta(i+3,x);
                    else
                            sum=sum|w[sir[i+3]-'A'] , i+=3;
            }//v[++k]=4 , i++;
            /*if(sir[i]=='('){
                int kkk=kk;
                    v2[++kk]=cauta(i,x,kkk);
            }
            else if(sir[i]=='N' && sir[i+1]=='O'){
                    if(w[sir[i+4]-'A']==0)
                        v2[++kk]=1;
                    else
                        v2[++kk]=0;
                    i+=4;
            }
            else if(sir[i]=='A' && sir[i+1]=='N')
                    v2[++kk]=3 , i+=2;
            else if(sir[i]=='O' && sir[i+1]=='R')
                    v2[++kk]=4 , i++;
            else if(sir[i]=='T' && sir[i+1]=='R')
                    v2[++kk]=1 , i+=3;
            else if(sir[i]=='F' && sir[i+1]=='A')
                    v2[++kk]=0 , i+=4;
            else if(sir[i]>='A'&&sir[i]<='Z'){
                if(w[sir[i]-'A']==0)
                    v2[++kk]=0;
                else
                    v2[++kk]=1;
            }
    int j=1;
    int sum;
    if(v2[j]==2)
        sum=!v2[j+1] , j+=2;
    else
        sum=v2[i] , j++;
    for(;j<=kk;++i)
        if(v2[j]==3)
            sum=sum&v[j+1] , j+=2;
        else if(v2[j]==4)
            sum=sum|v2[j+1] , j+=2;
            */
    return sum;
}

int main(){
    //freopen("bool.in","r",stdin);
    ifstream f("bool.in");
    f.getline(sir,1005);
    f>>n;
    f.get();
    f>>sir2;
    //scanf("%d%s",&n,sir2);
    //fclose(stdin);
    freopen("bool.out","w",stdout);
    int k=0;
    for(int j=0;j<n;j++){
        w[sir2[j]-'A']=!w[sir2[j]-'A'];
        int x=strlen(sir);
        k=0;
        //printf("%d",x);
        int i=0;
        while(!(sir[i]>='A'&&sir[i]<='Z'))
            i++;
        int sum=w[sir[i]-'A'];
        for(;i<x;i++){

                    //v[++k]=cauta(i,x,0);
            /*else if(sir[i]=='N' && sir[i+1]=='O'){
                    /*if(w[sir[i+4]-'A']==0)
                        v2[++k]=1;
                    else
                        v2[++k]=0;
                    i+=4;

            }*/
            if(sir[i]=='A' && sir[i+1]=='N'){//v[++k]=3 , i+=2;
                    if(sir[i+4]=='T'&&sir[i+5]=='R')
                            sum=sum&1 , i+=5;
                    else if(sir[i+4]=='F'&&sir[i+5]=='A')
                            sum=sum&0 ,i+=6;
                    else if(sir[i+4]=='N'&&sir[i+5]=='O')
                            sum=sum&(!w[sir[i+8]-'A']) , i+=8;
                    else if(sir[i+4]=='(')
                            sum=sum&cauta(i+4,x);
                    else
                            sum=sum&w[sir[i+4]-'A'] , i+=4;
            }
            else if(sir[i]=='O' && sir[i+1]=='R'){
                    if(sir[i+3]=='T'&&sir[i+4]=='R')
                        sum=sum|1 , i+=5;
                    else if(sir[i+3]=='F'&&sir[i+4]=='A')
                            sum=sum|0 ,i+=6;
                    else if(sir[i+3]=='N'&&sir[i+4]=='O')
                            sum=sum|(!w[sir[i+7]-'A']) , i+=7;
                    else if(sir[i+3]=='(')
                            sum=sum|cauta(i+3,x);
                    else
                            sum=sum|w[sir[i+3]-'A'] , i+=3;
            }//v[++k]=4 , i++;
            /*else if(sir[i]=='T' && sir[i+1]=='R'){
                    sum//v[++k]=1 , i+=3;
            }
            else if(sir[i]=='F' && sir[i+1]=='A')
                    v[++k]=0 , i+=4;
            else if(sir[i]>='A'&&sir[i]<='Z'){
                if(w[sir[i]-'A']==0)
                    v[++k]=0;
                else
                    v[++k]=1;
            }*/
        }
        //i=1;
        /*int sum;
        if(v[i]==2)
            sum=!v[i+1] , i+=2;
        else
            sum=v[i] , i++;
        for(;i<=k;++i)
            if(v[i]==3)
                sum=sum&v[i+1] , i+=2;
            else if(v[i]==4)
                    sum=sum|v[i+1] , i+=2;

        //printf("\n");*/
        printf("%d",sum);
    }

    fclose(stdout);
    return 0;
}