Cod sursa(job #3174600)

Utilizator paaull69Ion Paul paaull69 Data 24 noiembrie 2023 23:29:48
Problema Bool Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.22 kb
#include <bits/stdc++.h>

using namespace std;
typedef long long int ll;
#define MOD 9001


ifstream fin("cod.in");
ofstream fout("cod.out");

vector<int> v;
string s;
bool val[300];
int idx=0;

int Or();

int factor()
{

    int res=0;
    if(v[idx]==2)
    {
        idx++;
        res = !Or();
    }
    else if(v[idx]=='(')
    {
        idx++;
        res = Or();
        idx++;
    }
    else
    {
        if(isalpha(v[idx]))
        {
            res = val[v[idx]];

        }
        else
        {
            res= v[idx];
        }
        idx++;
    }
    //cout << res << " ";
    return res;
}
int And()
{

    int res = factor();
    while(v[idx]==3)
    {
        idx++;
        res = res && factor();
    }

    return res;
}
int Or()
{

    int res=And();
    while(v[idx]==4)
    {
        idx++;
        res = res || And();
    }
    return res;
}
/// 1 3 ((0 4 2 0) 4 ((1)))
int solve()
{
    idx=0;
    return Or();
}
int main()
{
    getline(fin,s);
    for(int i=0;i<s.size();i++)
    {
        if(s[i]==' ')
        {
            continue;
        }
        if(isalpha(s[i]))
        {
            vector<char> t;
            while(i < s.size() && isalpha(s[i]) )
            {
                t.push_back(s[i++]);
            }
            i--;
            if(t.size()==1)
            {
                v.push_back(t[0]);
            }
            else
            {
                if(t[0]=='N')
                {
                    v.push_back(2);
                }
                if(t[0]=='A')
                {
                    v.push_back(3);
                }
                if(t[0]=='O')
                {
                    v.push_back(4);
                }
                if(t[0]=='T')
                {
                    v.push_back(1);
                }
                if(t[0]=='F')
                {
                    v.push_back(0);
                }
            }

        }
        else
        {
            v.push_back(s[i]);
        }

    }

    int t;
    fin >> t;
    while(t--)
    {
        char x;
        fin >> x;
        val[x]=!val[x];
        fout << solve();
    }
}