Cod sursa(job #2338759)

Utilizator cosceexcosceex cosceex Data 7 februarie 2019 19:51:49
Problema Bool Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.97 kb
#include <cstdio>

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,int kk){
    i++;
    for(;i<x && sir[i]!=')';i++)
            if(sir[i]=='(')
                    v2[++kk]=cauta(i,x,kk-1);
            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);
    gets(sir);
    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);
        for(int i=0;i<x;i++){
            if(sir[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;
            }
            else if(sir[i]=='A' && sir[i+1]=='N')
                    v[++k]=3 , i+=2;
            else if(sir[i]=='O' && sir[i+1]=='R')
                    v[++k]=4 , i++;
            else if(sir[i]=='T' && sir[i+1]=='R')
                    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;
            }
        }
        int i=1,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("%d",sum);
        //printf("\n");
    }

    fclose(stdout);
    return 0;
}