Cod sursa(job #2841801)

Utilizator AndreibatmanAndrei Croitoriu Andreibatman Data 30 ianuarie 2022 14:44:16
Problema Bool Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("bool.in");
ofstream fout("bool.out");
char s[1010],c;
int i,n,l;
map<char,bool>f;
bool term(),fact();
bool expresie()
{
    int sum=term();
    while(i<l && s[i]=='O' && s[i+1]=='R')
        i+=3,sum=(sum || term());
    return sum;
}
bool term()
{
    int prod=fact();
    while(s[i+1]=='A' && s[i+2]=='N')
        i+=5,prod=(prod && fact());
    return prod;
}
bool fact()
{
    int val=0,semn=0;
    while(s[i]=='N' && s[i+1]=='O')
        semn=1-semn,i+=4;
    if(s[i]=='(')
    {
        i++;
        val=expresie();
        while(s[i]==')' || s[i]==' ')
            i++;
        if(semn==0)
            return val;
        else return !val;
    }
    else if(s[i]=='T' && s[i+1]=='R')
        i+=5,val=1;
    else if(s[i]=='F' && s[i+1]=='A')
        i+=6,val=0;
    else val=f[s[i]],i+=2;
    if(semn==0)
        return val;
    else return !val;
}
int main()
{
    for(i='A';i<='Z';i++)
        f[(char)i]=false;
    fin.getline(s,1005);
    l=strlen(s);
    fin>>n;
    while(n--)
    {
        fin>>c;
        f[c]=(!f[c]);
        i=0;
        fout<<expresie();
    }
    return 0;
}