Cod sursa(job #3199374)

Utilizator Sasha_12454Sasha Costea Sasha_12454 Data 1 februarie 2024 15:52:48
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <bits/stdc++.h>

using namespace std;
#define Dumnezeu
ifstream in ("bool.in");
ofstream out ("bool.out");
const int LIM=92,DIM=1005;
int n;
char curr[DIM],s[DIM];
char ch;
int cnt;
int fr[LIM];
bool expresie ();
bool termen ();
bool factor ();
bool finall ();
bool expresie()
{
    bool res;
    res=termen();
    while(cnt+1<strlen(s) && (s[cnt]=='O' && s[cnt+1]=='R'))
    {
        cnt+=2;
        res=(res | termen());
    }
    return res;
}
bool termen()
{
    bool res;
    res=factor();
    while(cnt+2<strlen(s) && (s[cnt]=='A' && s[cnt+1]=='N' && s[cnt+2]=='D'))
    {
        cnt+=3;
        res=(res & factor());
    }
    return res;
}
bool factor()
{
    bool res;
    if(cnt+2<strlen(s) && s[cnt]=='N' && s[cnt+1]=='O' && s[cnt+2]=='T')
    {
        cnt+=3;
        res=(1 ^ factor());
    }
    else if(s[cnt]=='(')
    {
        cnt++;
        res = expresie();
        cnt++;
    }
    else
    {
        res=finall();
        cnt++;
    }
    return res;
}
bool finall()
{
    bool res;
    if(cnt+3<strlen(s) && s[cnt]=='T' && s[cnt+1]=='R' && s[cnt+2]=='U' && s[cnt+3]=='E')
    {
        res=true;
        cnt+=3;
    }
    else if(cnt+4<strlen(s) && s[cnt]=='F' && s[cnt+1]=='A' && s[cnt+2]=='L' && s[cnt+3]=='S' && s[cnt+4]=='E')
    {
        res=false;
        cnt+=4;
    }
    else
    {
        res=fr[s[cnt]];
    }
    return res;
}
int main()
{
    in.getline(curr,DIM);
    in>>n;
    for(int i=0; i<strlen(curr); i++)
    {
        if(curr[i]==' ')
            continue;
        else
            s[cnt++]=curr[i];
    }
    for(int i=1; i<=n; i++)
    {
        cnt=0;
        in>>ch;
        fr[ch]=(fr[ch] ^ 1);
        out<<expresie();
    }
    return 0;
}