Cod sursa(job #2784275)

Utilizator PetraPetra Hedesiu Petra Data 16 octombrie 2021 11:17:15
Problema Bool Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.26 kb
 #include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

vector<string> v;
string s;
int tokenizing ()
{
    char cc;
    getline(fin, s);
    for (int i=0; i<s.size(); i++)
    {
        if (s[i]=='(')
            v.push_back("(");
        else if (s[i]==')')
            v.push_back (")");
        else if (s[i]==' ')
            continue;
        else
        {
            string cuv;
            int j=i;
            while (j<s.size() && s[j]!=' ' && s[j]!=')' && s[j]!='(')
            {
               cuv.push_back(s[j]);
               j++;
            }
            i=j-1;
            v.push_back(cuv);
        }
    }

    /*for (int i=0; i<v.size(); i++)
    {
        if (v[i].size()==1 && v[i]!="(" && v[i]!=")")
            v[i]="0";
        else if (v[i]=="FALSE")
            v[i]="0";
        else if (v[i]=="TRUE")
            v[i]="1";
        else if (v[i]=="OR")
            v[i]="||";
        else if (v[i]=="AND")
            v[i]="&&";
        else if (v[i]=="NOT")
            v[i]="!";
        cout << v[i] << " ";
    }*/
}
int i=0;
int vars[256]={0};
int solve_or();
int get_value()
{
    int cc, ok=0;
    while (v[i]=="NOT")
    {
        ok^=1;
        i++;
    }
    if (v[i]=="(")
    {
        i++;
        cc=solve_or();
        i++;
    }
    else if (v[i]=="TRUE")
    {
        cc=1;
        i++;
    }
    else if (v[i]=="FALSE")
    {
        cc=0;
        i++;
    }
    else
    {
        cc=vars[v[i][0]];
    }
    if (ok==0)
        return cc;
    else
        return cc^1;
}
int solve_and ()
{
    int rez, cc1=get_value(), cc2;
    if (i<v.size() && v[i]=="AND")
    {
        i++;
        cc2=solve_and();
        rez=cc1&cc2;
        return rez;
    }
    return cc1;
}
int solve_or ()
{
    int rez, cc1=solve_and(), cc2;
    if (i<v.size() &&  v[i]=="OR")
    {
        i++;
        cc2=solve_or();
        rez=cc1|cc2;
        return rez;
    }
    return cc1;
}
int main()
{
    tokenizing();
    int x;
    string s;
    fin >> x >> s;
    for (int i=0; i<s.size(); i++)
    {
        vars[s[i]]^=1;
        fout << solve_or();
    }
    return 0;
}