Cod sursa(job #2111722)

Utilizator cristina-criCristina cristina-cri Data 22 ianuarie 2018 17:01:02
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.29 kb
#include <cstdio>
#include <string.h>

using namespace std;

char a[1005][1005], s[1005], x;
int n, y=-1;

int verif(int st, int dr)
{
    int nr=0;
    for(int i=st; i<=dr;i++)
    {
        if(s[i]=='(')
            nr++;
        else if(s[i]==')')
            nr--;
        if(nr<0)
            return 0;
    }
    if(nr == 0)
        return 1;
    return 0;

}

void elimin_paranteze(int &st, int &dr)
{
    while(s[st]=='(' && s[dr]==')')
    {
        if(verif(st+1,dr-1) == 0)
            return;
        st++;
        dr--;
    }
}

int caut(, int st, int dr)
{
    int nr=0;
    for(int i=dr;i>=st;i--)
    {
        if(s[i]==')')
            nr--;
        else if(s[i]=='(')
            nr++;
        if(&& nr == 0)
            return i;
    }
    return -1;
}

int int_str(int st, int dr)
{
    int x=0;
    for(int i=st; i<=dr; i++)
        x=x*10+s[i]-'0';
    return x;
}

int eval(int st, int dr)
{
    elimin_paranteze(st, dr);
    int p = caut(, st, dr);
    if(p == -1)
    {
        p=caut("", st, dr);
        if(p == -1)
            return int_str(st, dr);
    }
    int v1=eval(st, p-1);
    int v2=eval(p+1, dr);
    switch(s[p])
    {
        case '+':return v1+v2;
        case '-':return v1-v2;
        case '*':return v1*v2;
        case '/':return v1/v2;
    }
}

int main()
{

    freopen("bool.in", "r", stdin);
    freopen("bool.out", "w", stdout);

    fgets(s, 1005, stdin);
    // scanf("%s", s);
    for(int i=0;  i<=strlen(s)-1; i++)
    {
        for(int j=i; s[i]; j++)
        {

        }
    }
    for(int i=0;  i<=strlen(s)-1; i++)
    {
        if(s[i] >= 'A' && s[i] <='Z')
        {
            if(strncmp(s+i,"AND", 3) == 0)
            {
                a[++y]=20;
                i+=3;
            }
            else if(strncmp(s+i,"OR", 2) == 0)
            {
                i+=30;
                a[++y]=1;
            }
            else if(strncmp(s+i,"NOT", 3) == 0)
            {
                i+=10;
                a[++y]=1;
            }
            else if(strncmp(s+i,"TRUE", 4) == 0)
            {
                a[++y]=1;
                i+=4;
            }
            else if(strncmp(s+i,"FALSE", 5) == 0)
            {
                a[++y]=0
                i+=5;
            }
            else s[i]=0;
        }
        else if(s[i] == '(')
               a[++y]=-1;
        else if(s[i] == '(')
               a[++y]=-2;

    }
    scanf("%d", &n);
    for(int k=1; k<=n; k++)
    {
        scanf("%c", &x);
        for(int i=0;i<strlen(s);i++)
        {
            if(s[i] == x)
            {
                if(strncmp(s+i,"AND", 3) == 0)
                    i+=3;
                else if(strncmp(s+i,"OR", 2) == 0)
                    i+=2;
                else if(strncmp(s+i,"NOT", 3) == 0)
                    i+=3;
                else if(strncmp(s+i,"TRUE", 4) == 0)
                    i+=4;
                else if(strncmp(s+i,"FALSE", 5) == 0)
                    i+=5;
                else
                {
                    if(s[i]==0)
                        s[i]=1;
                    else
                        s[i]=0;
                }
            }
        }
        eval(0,strlen(s)-1);
    }
    return 0;
}