Cod sursa(job #3313784)

Utilizator livliviLivia Magureanu livlivi Data 6 octombrie 2025 16:49:26
Problema Bool Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.66 kb
//
//  main.cpp
//  Bool
//
//  Created by Andrada Minca on 23.09.2025.
//

#include <fstream>
#include <vector>
using namespace std;
ifstream cin("bool.in");
ofstream cout("bool.out");
int ind=0;
// char s[1005];
string s;
vector<bool> state(27,false);
bool expresie();
bool factor();
bool termen();
bool numar();
bool altcv();
bool tf();
bool expresie()
{
    bool ans=termen();
    while(ind + 1 < s.size() && s.substr(ind, 2) == "OR")
    {
        ind+=2;
        ans|=termen();
    }
    return ans;
}
bool termen()
{
    bool ans=factor();
    while(ind + 2 < s.size() && s.substr(ind, 3) == "AND")
    {
        ind+=3;
        ans&=factor();
    }
    return ans;
}
bool factor()
{
    // bool ans=altcv();
    bool ans = false;
    while(ind + 2 < s.size() && s.substr(ind, 3) == "NOT")
    {
        ind+=3;
        ans ^= 1;
    }
    return ans ^ altcv();
}
bool altcv()
{
    bool ans=0;
    if(s[ind]=='(')
    {
        ind++;
        ans=expresie();
        ind++;
    }
    else if(ind + 1 >= s.size() || s[ind + 1] > 'Z' || s[ind + 1] < 'A')
    {
        ans=numar();
        ind++;
    }
    else ans=tf();
    return ans;
}
bool tf()
{
    if(s[ind]=='T')
    {
        ind+=4;
        return true;
    }
    else if(s[ind]=='F')
    {
        ind+=5;
        return false;
    }
    return false;
}
bool numar()
{
    return state[s[ind]-'A'];
}
int main()
{
    int n;
    getline(cin, s);

    string t = "";
    for (auto c : s) {
        if (c != ' ') {
            t += c;
        }
    }
    s = t;

    cin>>n;
    for(int i=0;i<n;i++)
    {
        char x;
        cin>>x;
        state[x-'A']=!state[x-'A'];
        cout<<expresie();
        ind=0;
    }
    return 0;
}