Cod sursa(job #2096218)

Utilizator stefdascalescuStefan Dascalescu stefdascalescu Data 28 decembrie 2017 20:08:51
Problema Bool Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.99 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
char c[1002];
char bun[1002];
int L=0,n;
char lt;
bool val[27];
char *p;
void init()
{
    f.getline(c,1001);
    int q=strlen(c);
    for(int i=0;i<q;++i)
        if(c[i]=='(' || c[i]==')')
           bun[L++]=c[i];
        else
            if(c[i]>='A' && c[i]<='Z' && !(c[i+1]>='A' && c[i+1]<='Z'))
                bun[L++]=c[i];
            else
                if(c[i]==' ')
                    continue;
                else
                    if(c[i]=='T' && c[i+1]=='R')
                        bun[L++]='1',i+=3;
                    else
                        if(c[i]=='F' && c[i+1]=='A')
                            bun[L++]='0',i+=4;
                        else
                            if(c[i]=='A' && c[i+1]=='N')
                                bun[L++]='&',i+=2;
                            else
                                if(c[i]=='N' && c[i+1]=='O')
                                    bun[L++]='!',i+=2;
                                else
                                    if(c[i]=='O' && c[i+1]=='R')
                                        bun[L++]='|',i+=2;
}
bool termen();
bool eval()
{
    bool r = termen();
    while (*p=='|'){
        ++p;
        r|=termen();
    }
    return r;
}
bool termen()
{
    bool r=0;
    bool neg=0;
    while(*p=='!')
    {
       ++p;
       neg=!neg;
    }
    if(*p=='(')
    {
        ++p;
        r=eval();
        ++p;
    }
    else
        if(*p>='0' && *p<='1')
            r=(*p-'0');
        else
            if(*p>='A' && *p<='Z')
                r=val[*p-'A'];
    if(neg)
        r!=r;
    while(*p=='&')
        ++p,r&=termen();
    return r;
}
int main()
{
    init();
    f>>n;
    for(int i=1;i<=n;++i)
    {
        f>>lt;
        val[lt-'A']=1-val[lt-'A'];
        p=bun;
        if(eval())
            g<<1;
        else
            g<<0;
    }
    return 0;
}