Cod sursa(job #2864591)

Utilizator TeodoraMaria123Serban Teodora Maria TeodoraMaria123 Data 7 martie 2022 23:53:42
Problema Bool Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <fstream>
#include <string>
#include <cstring>
#include <bitset>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
const int nmax=1e3;
char t[nmax+5];
bitset <30> val;
string s;
int i,n;
bool termen();
bool factor();
bool eval()
{
    bool r=termen();
    while(s[i]=='|')
    {
        i++;
        r|=termen();
    }
    return r;
}
bool termen()
{
    bool r=factor();
    while(s[i]=='&')
    {
        i++;
        r&=factor();
    }
    return r;
}
bool factor()
{
    int r;
    if(s[i]=='(')
    {
        i++;
        r=eval();
        i++;
    }
    else if(s[i]=='!')
    {
        i++;
        r=!eval();
    }
    else if(isdigit(s[i]))
        r=s[i]-'0';
    else
        r=val[s[i]-'A'];
    i++;
    return r;
}
int main()
{
    in.getline(t,nmax+5);
    while(t[i])
    {
        if(t[i]==' ')
            i++;
        else if(t[i]=='('  ||  t[i]==')')
            s+=t[i++];
        else if(isalpha(t[i])  &&  !isalpha(t[i+1]))
            s+=t[i++];
        else if(t[i]=='O'  &&  t[i+1]=='R')
        {
            s+='|';
            i+=2;
        }
        else if(t[i]=='A'  &&  t[i+1]=='N')
        {
            s+='&';
            i+=3;
        }
        else if(t[i]=='N'  &&  t[i+1]=='O')
        {
            s+='!';
            i+=3;
        }
        else if(t[i]=='T'  &&  t[i+1]=='R')
        {
            s+='1';
            i+=4;
        }
        else if(t[i]=='F'  &&  t[i+1]=='A')
        {
            s+='0';
            i+=5;
        }

    }
    in>>n;
    for(int j=1; j<=n; j++)
    {
        char ch;
        in>>ch;
        val[ch-'A']=1-val[ch-'A'];
        i=0;
        out<<eval();
    }
    return 0;
}