Cod sursa(job #3195914)

Utilizator Bianca2507Negret Bianca Bianca2507 Data 22 ianuarie 2024 09:16:01
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("bool.in");
ofstream cout("bool.out");

int expresie();
int termen();
int factor();

char c[1005],s[1005],ch;
int n,l,e[35],i;

int expresie()
{
    int r=termen();
    while(s[i]=='O'&&s[i+1]=='R')
    {
        i=i+2;
        r=r|termen();
    }
    return r;
}
int termen()
{
    int r=factor();
    while(s[i]=='A'&&s[i+1]=='N'&&s[i+2]=='D')
    {
        i+=3;
        r=r&factor();
    }
    return r;
}
int factor()
{
    int r;
    if(s[i]=='(')
    {
        i++;
        r=expresie();
        i++;
    }
    else if(s[i]=='N'&&s[i+1]=='O'&&s[i+2]=='T')
    {
        i+=3;
        r=!(factor());
    }
    else if(s[i]=='T'&&s[i+1]=='R')
    {
        i+=4;
        r=true;
    }
    else if(s[i]=='F'&&s[i+1]=='A')
    {
        i+=5;
        r=false;
    }
    else
    {
        r=e[s[i]-'A'];
        i++;
    }
    return r;
}
int main()
{
    cin.getline(c,1005);
    cin>>n;
    for(int j=0; c[j]!=0; j++)
        if(c[j]!=' ')
            s[l++]=c[j];

    for(int j=0; j<=30; j++)
        e[j]=0;

    while(n--)
    {
        cin>>ch;
        e[ch-'A']=1-e[ch-'A'];
        i=0;
        cout<<expresie();
    }
    return 0;
}