Cod sursa(job #871834)

Utilizator costin7856Antonesi Florean Costin costin7856 Data 5 februarie 2013 12:46:15
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <cstdio>
#include <cstring>
#define dim 10001
using namespace std;
int v[dim],n,lg=-1,i;
char s[dim],k,c;
int expr();
int val();
int factor()
{
    int f;
    if (s[i]=='(')
    {
        i++;
        f=expr();
        i++;
    }
    else
    {
        f=val();
        i++;
    }
    if (s[i]==' ')
    i++;
    return f;
}
int termen()
{
    int f=factor();
    while(i<=lg&&s[i]=='A'&&s[i+1]=='N'&&s[i+2]=='D')
        {
            i+=4;
            f=factor();
        }
    return f;
}
int expr()
{
    int f=termen(),l;
    while (i<=lg&&s[i]=='O'&&s[i+1]=='R')
        {
            i+=3;
            l=termen();
            f=l;
        }
        return f;
}
int val()
{
    int f;
    if (s[i]=='N'&&s[i+1]=='O'&&s[i+2]=='T')
    {
        i+=3;
        if (s[i]==' ')
        i++;
        f=!expr();
        return f;
    }
    else
    if(s[i]=='T'&&s[i+1]=='R'&&s[i+2]=='U')
    {
        i+=4;
        return 1;
    }
    else
    if(s[i]=='F'&&s[i+1]=='A'&&s[i+2]=='L')
    {
        i+=5;
        return 0;
    }
    else
    return v[s[i]-'A'];
}
int main()
{
    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);
    scanf("%c",&c);
    while (c!='\n')
        {
            lg++;
            s[lg]=c;
            scanf("%c",&c);
        }
    scanf("%d\n",&n);
    for(int I=1;I<=n;I++)
    {
        scanf("%c",&k);
        if(v[k-'A']=!v[k-'A'])
        i=0;
        printf("%d", expr());
    }
}